节点 Express.js 中间件,结束响应

Node Express.js Middleware, end Response

validateRegister: async (req, res, next) => {

        UserModel.findOne({email:req.body.email}, (err, example) => {
            console.log(example);
            if(err) console.log(err);
            if(example) {
                res.status(400).json({message: "Email already registered!"});
                res.end() //next('route')
            }
        });
        console.log("test");
        const user = new UserModel(req.body);
        await user.save((err) => {
            if (err) return res.status(500).json({ message: "Database issue!" });
        }); 

        next();
    },

好的,我尝试使用 mongoose 插入用户数据,如果它不在数据库中的话。如果有关电子邮件的用户已经在数据库中,则应结束响应并且不插入用户。我试图用 res.end() 和 next('route') 结束响应,但似乎没有任何效果,console.log("test") 仍在运行。

错误:

events.js:353
      throw er; // Unhandled 'error' event
      ^

Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
    at ServerResponse.setHeader (_http_outgoing.js:561:11)

感谢您的帮助

如果用户电子邮件已找到,您可以在 return 回复前添加 return。

您的程序似乎调用了 res 两次

回调函数下方的代码在回调完成之前执行,并且发生了多次 res.send。

你可以试试这个

validateRegister: async (req, res, next) => {

UserModel.findOne({ email: req.body.email }, (err, example) => {
    console.log(example);
    if (err) {
        console.log(err);
        return res.status(500).json({ message: "Something went wrong" });

    }
    if (example) {
        return res.status(400).json({ message: "Email already registered!" });
    }
    console.log("test");
    const user = new UserModel(req.body);
    await user.save((err) => {
        if (err) return res.status(500).json({ message: "Database issue!" });
    });
});

next();
}

validateRegister: async (req, res, next) => {
try {
    let example = await UserModel.findOne({ email: req.body.email });
    console.log(example);
    if (example)
        return res.status(400).json({ message: "Email already registered!" });
    console.log("test");
    const user = new UserModel(req.body);
    await user.save((err) => {
        if (err) return res.status(500).json({ message: "Database issue!" });
    });
    next();
} catch (err) {
    console.log(err);
    return res.status(500).json({ message: "Something went wrong" });
}
}