关於 errorBack 中的 promise.all

来源:7-9 客户端提交数据安全校验.mp4

weixin_慕勒6073767

2022-06-26

老师您好,在 errorBack 中,跟著课程及文档的写法去循环做错误校验时:

const { validationResult } = require('express-validator');
module.exports = (validator) => {
  return async (req, res, next) => {
    await Promise.all(
      validator.map((validate) => {
        validate.run(req);
      })
    );
 
    const errors = validationResult(req);
    console.log('errors:', errors);
    if (!errors.isEmpty()) {
      return res.status(401).json({ error: errors.array() });
    }
    next();
  };
};

上述写法 errors 会是空的,打印出errors: Result { formatter: [Function: formatter], errors: [] },以至於没办法侦测到错误。

但若是把循环的地方改成下列两种写法就可以產生出正确结果:

await Promise.all(
  validator.map(async (validate) => {
    await validate.run(req);
  })
);
for (let validate of validator) {
  const result = await validate.run(req);
  if (result.errors.length) break;
}

请问是什麼原因让第一种写法无法顺利遍歷出错误呢?还请老师解答。

写回答

2回答

qq_慕斯卡6298961

2022-07-19

同样的问题

0
0

北瑶

2022-06-27

我看你给出的代码并没有明显错误,两种方式的代码实现在官方文档中,也是明确说明支持,可以在检查一下是否有其他地方的代码出现问题。可以结合 文档地址:https://express-validator.github.io/docs/running-imperatively.html 在检查一下其他地方的代码。

或者,将你的代码发给我,一起看看,已经给你发私信了,记得查收

0
0

Node.js工程师养成计划 保姆级教程 快速入门实战收尾

保姆级教程,从0起步,吃透Node完整技术体系

257 学习 · 94 问题

查看课程