gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 02:31:35 24 4
gpt4 key购买 nike

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

最佳答案

您需要导出应用程序并将其包含在路由文件中

module.exports = app;

然后在你的路由文件中

var app = include('pathtoyourapp.js');

然后您就可以访问路线文件中的应用程序。

关于node.js - 为什么 Express.js 的 app.get() 只能在调用 app.listen() 的同一个文件中工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26242193/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com