为什么Express.js的app.get()只能在同一个文件中工作app.listen()被调用?

时间:2014-10-07 17:57:08

标签: node.js express

当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()只针对调用它的文件吗?

3 个答案:

答案 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 参数以操纵服务器行为。