2016-11-02 1 views
0

Ich habe bis jetzt zahlreiche Express/Angular Guides für Routing gefolgt, und in den Szenarien jeder Arbeit, und ich habe den Dreh raus, aber ich habe ein kleines Problem, wenn Ich versuche, die Route in eine andere JS-Datei zu integrieren.Express-Routing außerhalb von server.js Datei

Zum Beispiel habe ich dies in server.js, es wird funktionieren. Wenn ich es in "char.js" schreibe, wird es nicht funktionieren.

Ich verwende ein Paket, mit dem diese Funktionen Blizzard-Spieldaten abrufen können. Die Endpunkte arbeiten direkt, versuchen aber, die Funktionen inline zu arbeiten.

server.js - Die Datei, die npm mit

app.get('/Users', function(req, res){ 
    return blizzard.wow.character(['profile'], { origin: 'us', realm: 'Myserver', name: 'Mycharname' }) 
    .then(response => res.json(response.data)) 

öffnet Diese Funktion arbeiten - Wenn ich/Benutzer gehen, werde ich die Json Antwort.

Wenn ich es

Chars.js bewegen

const express = require('express'); 
const router = express.Router(); 
const account = require('../routes/account'); 
const wow = require('../routes/wow.js'); 
const sc2 = require('../routes/sc2'); 
const d3 = require('../routes/d3'); 
const blizzard = require('../config/blizzard.js'); 


/* 
// Create a route for the 'Users' path 
const char = router.get('Char', function(req, res){ 
    return blizzard.wow.character(['profile'], { origin: 'us', realm: 'Myserv', name: 'Myname' }) 
    .then(response => res.json(response.data)) 
}); 
*/ 



// Create a route for the 'Users' path 
    router.get('/', function(req, res) { 
    return blizzard.wow.character(['profile'], { origin: 'us', realm: 'Myrealm', name: 'Mychar' }) 
    .then(response => res.json(response.data)); 
}); 

    }); 



/* 
// Create a route for the 'Users' path 
const users = router.get('Users', function(req, res) { 
    return blizzard.wow.character(['profile'], { origin: 'us', realm: 'Myserv', name: 'Myname' }) 
    .then(response => res.json(response.data)); 
}); 
*/ 
module.exports = router; 

Es wird nicht länger funktionieren. Ich habe das -same- snipper, aber mit Unterschiedname für die Zeichenvariable in meinem Benutzersteuerpult, das 100% außerhalb dieser Funktion arbeitet.

Ich bin mir nicht sicher, was genau ich vermisse.

Entire Server.js

'use strict'; 

require('dotenv').config({ silent: true }); 

var express = require('express') 
     ,http = require('http') 
     ,path = require('path') 
     ,app = express() 
     ,fs = require('fs'); 
const router = express.Router(); 
const account = require('./routes/account'); 
const wow = require('./routes/wow'); 
const sc2 = require('./routes/sc2'); 
const d3 = require('./routes/d3'); 
const chars = require('./routes/chars.js'); 
const blizzard = require('./config/blizzard.js'); 



const port = process.env.PORT || 5000; 
app.use('/account', account); 
app.use('/wow', wow); 
app.use('/sc2', sc2); 
app.use('/d3', d3); 
// Mount the 'Users' route to `/` 
app.use(express.static('public')); 
app.engine('html', require('ejs').renderFile); 
app.set('view engine', 'html'); 
app.get('/', function (req, res) { 
    res.render('index'); 
}); 

app.use('/', chars); 


app.listen(port,() => { 
    console.log(`Blizzard.js Example App listening on port ${port}!`); 
}); 

lief ich dies vom Paketeigner und er erklärte den Code, den ich in Chars.js haben sollte funktionieren so fühle ich mich wie es ist etwas in Bezug auf meine Platzierung von Dateien oder Variablen. Ich habe console.log auf chars.js geschrieben und eine Antwort von server.js bekommen, also weiß ich, dass sie geladen wird.

Wenn ein zusätzliches Skript erforderlich ist, lassen Sie es mich wissen. Das könnte auch mein Problem sein, weil ich nur diese beiden Skripte modifiziert habe.

aktualisiert Code, um Änderungen

Antwort

1

Sie einen anderen Express-Instanz in Chars.js nicht erstellen.

1 Entfernen

const app = express() 

2 Verschieben

app.use('/', chars); 

Chars.js-Server.js

Arbeitsbeispiel:

server.js

routes/chat.js

const express = require('express'); 
const router = express.Router(); 

router.get('/users', function(req, res) { 
//  return blizzard.wow.character(['profile'], { origin: 'us', realm: 'Myrealm', name: 'Mychar' }) 
//     .then(response => res.json(response.data)); 

    setTimeout(function() { 
     res.json({data: 'some data'}) 
    }, 2000); 
}); 

module.exports = router; 
+0

Added 'app.use ('/ chars.js', Zeichen);' Added 'App server.js.Verwenden Sie ('/', char); 'zu server.js Jetzt bekommen 'Router.use() erfordert Middleware. Ich werde nach neuen Fehlern suchen. – DNorthrup

+0

1 Sie müssen Router-Instanz (in Chars.js) 2 Setup Route 3 exportieren erstellt Router 4 in Server.js sollten Sie es mit einem Pfad verbinden app.use ('/', Zeichen); wo 'const chars = erfordern ('./ routes/chars.js');' das sollte genug sein, entfernen 'app.use ('/ chars.js', Zeichen);' – Dmitriy

+0

Danke für die Updates. Mir fehlt offensichtlich etwas. Ich habe meine Chars.js und Server.js aktualisiert - Würde es Ihnen etwas ausmachen, mir zu sagen, was ich falsch mache? (Ich habe in module.exports wie empfohlen empfohlen, basierend auf dem 'Middleware-Problem' – DNorthrup

Verwandte Themen