当app.listen()与app.get()在同一个文件中时,它可以正常工作;当我通过require在其他文件中添加app.get()调用时,他们无法工作:
// ~ means root folder
// This below is in ~/index.js
var routes = require('~/routes/routes.js');
var server = app.listen(3000, function () {
console.log('Listening on port %d', server.address().port);
});
app.get('/snails', function (req, res) {
res.send('ESCARGOT');
});
// This below is in ~/routes/routes.js
var app = module.exports = require('exports')();
app.get('/birds', function () {
res.send('PENGUIN');
});
// SUCCESS -> localhost:3000/snails will return "ESCARGOT"
// FAIL -> localhost:3000/birds will return "Cannot GET /birds"
证明要点的第二个例子;这次,app.listen()被移动到routes.js:
// ~ means root folder
// The below is in ~/index.js
var routes = require('~/routes/routes.js');
app.get('/snails', function (req, res) {
res.send('ESCARGOT');
});
// The below is in ~/routes/routes.js
var app = module.exports = require('exports')();
app.get('/birds', function () {
res.send('PENGUIN');
});
var server = app.listen(3000, function () {
console.log('Listening on port %d', server.address().port);
});
// FAIL -> localhost:3000/snails will return "Cannot GET /snails"
// SUCCESS -> localhost:3000/birds will return "PENGUIN"
为什么会这样?是因为app.listen()只针对调用它的文件吗?
答案 0 :(得分:0)
您需要导出您的应用并将其包含在路线文件中
module.exports = app;
然后在您的路线文件中
var app = include('pathtoyourapp.js');
然后您就可以在路线文件中访问您的应用。
答案 1 :(得分:0)
你应该在routes/routes.js
module.exports = function(app) {
app.get('/birds', function(req, res, next) {
res.send('Hello');
});
};
并在index.js
中var app = express();
app.get('/snails', function(req, res, next) {
res.send('SNAILS');
});
require('./routes/routes')(app);
app.listen(3000);
现在应该有效。
顺便说一下,我不是100%肯定你在做require('exports')()
时想要做什么,看起来很奇怪你实际上是在导出那个,而不是app
(包含birds
中的新routes/routes.js
路线),这就是为什么它可能无法正常工作。试试我建议的方式。
如果您需要任何其他内容,请告诉我。
答案 2 :(得分:0)
使用示例:
var express = require('express'),
http = require('http'),
port = Number(process.env.PORT || 3000),
app = express();
app.get('/', function(req, res) {
res.end('Test message');
});
http.createServer(app).listen(port);
最重要的是:
http.createServer(app).listen(port);
发送 app 参数以操纵服务器行为。