在下一个示例中,应用程序正在使用m
中间件。
const express = require("express");
const app = express();
const m = () => (req, res, next) => {
next();
};
app.use(m());
app.get("/", (req, res) => {
res.sendStatus(200);
});
app.listen(5000);
如果我(偶然)传递了函数本身而不是调用它的结果:
-app.use(m());
+app.use(m); // causes express server hangs
express服务器将挂起。
如何调试此问题?
答案 0 :(得分:1)
m
是一个在调用它时返回中间件函数的函数。
要获得中间件功能,您必须使用m()
来调用它。如果您只是传递m
,那么它不是中间件函数并且执行它只是立即返回另一个函数并且从不调用next()
所以当express表示执行m
时,它会立即运行返回另一个函数(Express忽略它),你的请求永远不会被处理。
此外,在您显示的情况下,没有理由创建一个返回函数的函数。只需创建一个函数并将该函数的引用作为中间件传递。
function m(req, res, next) {
next();
}
app.use(m);
或内联:
app.use(function(req, res, next) {
next();
});