【发布时间】:2019-10-30 17:40:33
【问题描述】:
我正在尝试从使用 express 应用程序生成器生成的项目中的路由器访问我的应用程序级中间件。
中间件用于使用从路由器接收到的用户 ID 查询数据库。
我觉得我错过了一些非常简单(或基本)的东西,但无法解决问题(这是我的第一个 Node.js 项目)。因此,除了最佳实践之外,我还在寻找一个简单的解决方案
我尝试过使用不同的应用方法,包括发布。
/app.js
var MyAppMidW = function (req, res, next) {
res.send(queryDB(req));
next()
}
app.use(MyAppMidW);
/routes/index.js
router.get("/dbquery", (req, res) => {
if (req.header('auth-header')) {
res.send(req.app.get.MyAppMidW(req.header('auth-header'))); //The problem
}
else {
res.send(req.app.get('defaultData')); //This works
}
});
错误信息包括“$middleware is not a function”和“$middleware is not defined”。
解决方案
/app.js
app.MyAppMidW = function (req) {
queryDB(req);
}
/routes/index.js
router.get("/dbquery", (req, res) => {
if (req.header('auth-header')) {
req.app.MyAppMidW(req.header('auth-header'))); //Makes a database query
res.send(req.app.get('defaultData')); //Fetches database query result
}
else {
res.send(req.app.get('defaultData'));
}
});
【问题讨论】:
-
根据你的方案,这不是中间件吗?它只是一个接受 auth 标头的函数。它不需要是
app.MyAppMidW,您可以在文件中定义它并将其导入到需要的路由中(var MyAppMidW = require('./MyAppMidW');) -
可能。原始范围已更改,因此对我来说很难说。此函数在 app.js 中还有其他依赖项。我对这个词的使用不是很准确。
标签: javascript node.js express middleware