![](/img/trans.png)
[英]NodeJs + ExpressJS: router level middleware not able to take the request
[英]Unable to Apply Middleware to Router in ExpressJS?
我有一个应用程序,其中有公共路线和经过身份验证的路线。 isAuthenticated被应用于例如新闻 controller。
globalRouter: function (app) {
app.use((req, res, next) => {
logger.log("Endpoint: ", req.originalUrl);
next();
});
const userRouter = require("./user/controller");
const globalRouter = require("./global/controller");
const newsRouter = require("./news/controller");
app.use("/user", userRouter);
app.use("/global", globalRouter);
app.use("/news", middleware.isAuthenticated(), newsRouter); // here
}
这是在 middleware.js 文件中编写的isAuthenticated代码。
const security = require("../utils/security");
const service = require("../user/service");
exports.isAuthenticated = function (req, res, next) {
let authorization = req.headers.authorization;
let token = null;
if (authorization.startsWith("Bearer ")) {
token = authorization.substring(7, authorization.length);
if (token !== null) {
service.checkUserTokenMiddleware(token, security).then((response) => {
console.log("checkUserTokenMiddleware", response);
if (response) {
next();
}
});
}
}
};
问题是当我npm 启动应用程序时出现以下错误
TypeError:无法读取 Object.exports.isAuthenticated 处未定义的属性“标题”
我在这里想念什么?
为什么我在其他文件中同时使用req.body.blabla或req.headers.blabla之类的相同方法会出现这样的错误?
任何帮助都感激不尽。
问候。
只需在 function 调用后删除括号:
app.use("/news", middleware.isAuthenticated, newsRouter);
您不必在 app.use 的回调中调用app.use
,Express 本身会传入req,res,next
auth function 旁边并调用它。
这取决于您如何导入middleware.js
。 由于您正在导出,因此被验证为isAuthenticated
。 在传递给app.use
之前不应调用它。
其他需要注意的事情,你永远不要在错误或其他情况下调用下一个 function。
请看下面的例子。
// 中间件.js
const security = require("../utils/security");
const service = require("../user/service");
exports.isAuthenticated = function (req, res, next) {
let authorization = req.headers.authorization;
let token = null;
if (authorization.startsWith("Bearer ")) {
token = authorization.substring(7, authorization.length);
if (token !== null) {
service
.checkUserTokenMiddleware(token, security)
.then((response) => {
if (response) {
next();
}
})
.catch((error) => next(error));
} else {
next("UNAUTHORIZED");
}
} else {
next("UNAUTHORIZED");
}
};
// 应用程序.js
const middleware = require("./middleware")
app.use((req, res, next) => {
logger.log("Endpoint: ", req.originalUrl);
next();
});
const userRouter = require("./user/controller");
const globalRouter = require("./global/controller");
const newsRouter = require("./news/controller");
app.use("/user", userRouter);
app.use("/global", globalRouter);
app.use("/news", middleware.isAuthenticated, newsRouter); // here
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.