gpt4 book ai didi

javascript - Node js router.route包含所有异步中间件,路由器本身是异步的吗?

转载 作者:行者123 更新时间:2023-12-02 22:00:41 24 4
gpt4 key购买 nike

我有一个运行多个中间件的路由器。所以它看起来像这样。

router.route("/").get(something, Something_else, one_more_thing)

函数something、something_else、one_more_thing都是异步的。并且“one_more_thing”返回响应。

这是否意味着整个 router.route() 是异步的。或者我需要将其切换为类似的内容

router.get('/', async (req, res) => {
try {
await something
await something_else
results = await one_more_thing
res.json(results)
} catch (err) {
res.send(err);
}
});

更新::添加实际代码

这是我的 router.route 调用

    router.route('/clock_in').post(timeClockValidator, isManager, startingOnTime, isClockedIn, clockIn);

这是 timeClockValidator

export const timeClockValidator = async (req, res, next) => {
logger.info('validating time clock json.');

let schema = '';
let results = { errors: [] };

req.originalUrl === '/api/timeclock/clock_in'
? (schema = time_clock_schema)
: (schema = schema);

try {
results = await v.validate(req.body, schema);
} catch (error) {
logger.error(error);
return res.status(400).json('Error");
}

return results.errors.length !== 0
? (logger.error(results.errors),
res.status(400).json("Error")
: next();
};

其余功能的设置方法相同。

最佳答案

nodejs router.route contains all async middle ware, is the router itself async?

是的,如果处理传入请求所涉及的任何中间件或处理程序的任何部分是异步的,那么结果将异步传递(在事件循环的 future 某个时间点上)。 “异步”通常被称为“传染性”,因为一旦代码链中的任何内容都是异步的,那么整个结果就会变得异步,因为一旦代码链的任何部分被链,那么最终结果将始终延迟到事件循环的某个 future 滴答。

这有点像一次旅行,需要乘坐四趟不同的火车。如果一列火车发生故障并且您滞留 24 小时,那么您行程中的所有后续火车也将至少晚点 24 小时。

使用异步操作的中间件函数与并非专门设计为中间件函数的普通async函数之间存在差异。

做类似的事情:

router.route("/").get(something, something_else, one_more_thing)

somethingsomething_else 都必须接受诸如 (req, res, next) 之类的参数,并且它们必须调用 next () 当它们完成时,以便继续处理该路由列表中的下一个处理程序。它们可以是同步的,也可以是异步的,只要它们在完成后调用 next() 前进到下一个中​​间件,或者发送响应并通过不调用 next() 来停止进一步路由.

这需要一个与运行这样的东西完全不同的函数:

router.get('/', async (req, res) => {
try {
await something
await something_else
results = await one_more_thing
res.json(results)
} catch (err) {
res.send(err);
}
});

如果something()something_else()返回promises,那么你就不能以第一种形式使用这些函数——你只能使用它们像这样。

所以,这就是为什么我强烈不喜欢这些没有伪代码和没有真实代码的理论问题(它们对每个人来说效率较低)。如果您向我们展示 something()something_else() 的一些实际代码,那么我们可以准确地看到它们的编写方式,并可以建议您如何修复它们以使其工作采用其中一种形式,或者可以准确建议他们使用哪种形式。

关于javascript - Node js router.route包含所有异步中间件,路由器本身是异步的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59888136/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com