在Node JS中处理'res'

时间:2019-11-19 11:13:28

标签: node.js

我对NodeJS来说还比较陌生,遇到了一个问题。来自Angluar UI的传入请求有两个参数(loginId和密码),在Node上,我从本地json文件中读取数据,遍历“用户”数组,并根据匹配的参数,将特定的对象发送到服务器响应。但是,在“用户”数组中有多个对象的情况下,我的逻辑失败了,我还必须为不匹配的对象发送服务器响应。我知道我无法发送多个回复,但这是我需要帮助的地方。任何帮助将不胜感激。

代码如下:

if (jsonData.users.length > 0) {
            jsonData.users.forEach(user => {
                if ((reqBody.loginId === user.email || reqBody.loginId === user.mobile) && reqBody.password === user.password) {
                    res.send({ 'userData': user });
                } else {
                    res.json({ 'userData': 'No records found' });
                }
            })

2 个答案:

答案 0 :(得分:1)

res.send结束响应。
因此,第二次使用它不会发送任何内容。

https://www.nodejsconnect.com/blog/articles/sending-multiple-http-responses-expressjs

编辑:
我不确定您想要什么,但是我想您想要做这样的事情。 ->返回与用户ID和密码匹配的用户,或者返回“未找到记录”(甚至最好发送401-未经授权-状态码)

const user = jsonData.users.find(user => (reqBody.loginId === user.email || reqBody.loginId === user.mobile) && reqBody.password === user.password));
if (user) {
    res.send({ 'userData': user });
} else {
    res.json({ 'userData': 'No records found' });
// or res.sendStatus(401); // unauth
}

答案 1 :(得分:0)

尝试一下...如果您想在比赛结束后中断循环。

if (jsonData.users.length > 0) {
    let isMatch = false;
    jsonData.users.forEach(user => {
        if ((reqBody.loginId === user.email || reqBody.loginId === user.mobile) && reqBody.password === user.password) {
            isMatch = true;
            return res.send({ 'userData': user });
        }
    })
    if(!isMatch)
        res.json({ 'userData': 'No records found' });
}
相关问题