我正在学习更多关于API的知识,所以我决定为啤酒/啤酒厂建立一个简单的API,它工作得很好然后突然没有路由可行。我通过创建一个纯粹用于测试此问题的新路线来测试它,它运行正常。所以,我简化了我的其他路由,只是用res.send()
将消息发送回DOM,看看是否切断数据库连接可以帮助我查明问题。
此测试路由通过向DOM发送消息“hello!”按预期工作。 (/app/routes/test_routes.js
):
module.exports = function(app, db) {
app.get('/test', (req, res) => {
res.send("hello!");
});
};
然而,尽管功能相同(/app/routes/brewery_routes.js
),但这根本不起作用:
module.exports = function(app, db) {
app.get('/brewery', (req, res) => {
res.send("hello!");
});
};
这是拉出(/app/routes/index.js
)所有路线的路线索引:
const beerRoutes = require('./beer_routes');
module.exports = function(app, db) {
beerRoutes(app, db);
};
const breweryRoutes = require('./brewery_routes');
module.exports = function(app, db) {
breweryRoutes(app, db);
};
const cityRoutes = require('./city_routes');
module.exports = function(app, db) {
cityRoutes(app, db);
};
const testRoutes = require('./test_routes');
module.exports = function(app, db) {
testRoutes(app, db);
};
这是我的服务器文件,它处理所有路由(/server.js
):
const express = require('express');
const MongoClient = require('mongodb').MongoClient;
const bodyParser = require('body-parser');
const app = express();
const db = require('./config/db');
const PORT = 8000;
app.use(bodyParser.urlencoded({ extended: true }));
MongoClient.connect(db.url,(err, database) =>{
if (err) {
return console.log(err)
}
require('./app/routes')(app, database);
app.listen(PORT, () => {
console.log("We are pouring beer at port " + PORT);
});
});
我的应用程序的常规文件结构是:
Root/
app/
routes/
index.js
test_routes.js
brewery_routes.js
beer_routes.js
city_routes.js
server.js
当我查看控制台日志时,我看到/test
路由没有错误,但是其他路由返回了这个庞大的字体错误列表,这有点奇怪。你可以通过我的代码看到我没有加载任何字体,所以我想知道这是否是一个比我所知的更大的问题。
有什么建议吗?
答案 0 :(得分:2)
在index.js
中,您可以反复为module.exports
分配多个内容。只有最后一个才能生存,并且可供需要该模块的人使用。您没有显示加载index.js的代码并尝试使用这些路由,所以我不知道正确的解决方案是什么,但这肯定解释了为什么只有index.js中的最后一个路由/app/routes/test_routes.js
才能永远的工作。
因此,module.exports
的每个分配都会覆盖前一个分配。只有最后一个存活并实际导出:
const beerRoutes = require('./beer_routes');
module.exports = function(app, db) {
beerRoutes(app, db);
};
const breweryRoutes = require('./brewery_routes');
module.exports = function(app, db) {
breweryRoutes(app, db);
};
const cityRoutes = require('./city_routes');
module.exports = function(app, db) {
cityRoutes(app, db);
};
const testRoutes = require('./test_routes');
module.exports = function(app, db) {
testRoutes(app, db);
};
这就像:
let a;
a = function() { console.log("1"); }
a = function() { console.log("2"); }
a(); // outputs "2"
这可能是你想要的:
module.exports = function(app, db) {
require('./beer_routes')(app, db);
require('./brewery_routes')(app, db);
require('./city_routes')(app, db);
require('./test_routes')(app, db);
}
然后,当加载模块并调用构造函数时,您将初始化所有这些路径。