1 回答
TA贡献1796条经验 获得超4个赞
随着next()您移动到下一个中间件。
示例:
你有这样的路线:
app.get("/", (req, res, next) => {
res.send("hello")
})
您可以声明一个函数并使用它,而不是使用匿名函数,如下所示:
function firstMiddleware(req, res, next){
res.send("hello")
}
app.get("/", firstMiddleware);
您可以做的是您的路线中可以有多个中间件,例如:
function firstMiddleware(req, res, next){
console.log("hy");
next()
}
function secondMiddleware(req,res,next) {
console.log("hello")
res.send("hello");
}
app.get("/", firstMiddleware, secondMiddleware);
如你看到的。在我的第一个中间件中,我使用next(). 在这种情况下,这告诉express.js移动到下一个中间件secondMiddleware
中间件从左到右执行,next()您告诉它们移动到下一个,直到最后。
通常最后一个中间件是您的 API 端点,您不应该使用,next()否则您会“跳出”您的路线,并且如果您定义了全局错误处理程序,您将收到错误
另请注意:一个好处是通过创建一个名为controller.jsexample 的文件来分离您的路线和逻辑。
控制器.js
function firstMiddleware(req, res, next){
console.log("hy");
next()
}
function secondMiddleware(req,res,next) {
console.log("hello")
res.send("hello");
}
module.exports = {
firstMiddleware,
secondMiddleware
}
现在您可以导入它:
const { firstMiddleware, secondMiddleware } = require("./controller.js");
app.get("/", firstMiddleware, secondMiddleware);
这使得您的代码随着代码的增长而更容易维护
编辑:
router.post("/requests", async (req, res, next) => {
let { myData } = req.body;
let checkresult = await awbasicCheck(res, cluster, myData);
if (myCheck()) {
return next();
}
let someResults = await Promise.all(somePromises);
let someMoreResults = await Promise.all(somePromises);
if (someCheck()) {
return next();
} else {
res.status(400).send("message"); // My code reaches here! even when myCheck() is true
}
});
您使用return“是”停止函数的执行,但您还做的是承诺链接。
我在这里写了一个 async/await 方法
添加回答
举报