我对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' });
}
})
答案 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' });
}