[英]Return status in Nodejs caused Network request failed
这是一个关于 Nodejs (10.16) 和 express (4.16.4) 中的 return 的新手问题,前端是 react native 0.59。 这是 Nodejs 服务器上的代码在成功查询后返回状态 200:
router.post('/new', [auth_deviceid, auth_userinfo, auth_role(['admin', 'eventer', 'messager'])], async (req, res) => {
//prepare obj msg....
try {
await msg.save();
msg.user_name = req.body.alias;
msg.user_avatar = req.user.user_data.avatar;
const io = req.app.get("io");
const socket_id = req.body.socket_id;
const socket = io.sockets.connected[socket_id];
const room = msg.event_id.toString();
socket.join(room);
socket.to(room).emit("event message", msg);
console.log("after emit to room : ", room); //<<<==this line shown in console screen
return res.status(200); //<<<=== hang here with no error thrown. But instead res.status(200).send("I am ok") is working.
} catch (err) {
console.log("Error in saving/braodcasting a new message", err);
return res.status(400).send(err.message);
};
});
上面的代码在 react native 中调用,代码如下:
async _onSend(messages = []) {
//do something...
let obj = JSON.stringify({
_device_id: DeviceInfo.getUniqueID(),
sender_id: this.state.myself.id,
sender_grpmember_id:(this.props.grpmember_id || this.props.navigation.state.params.grpmember_id),
alias:this.props.alias,
socket_id: this.props.socket.id,
data: {
msg_body:messages[0].text,
upload_content_info: ""
},
event_id: this.props.navigation.state.params.eventId,
_grpmember_id:(this.props.grpmember_id || this.props.navigation.state.params.grpmember_id),
_group_id:(this.props.group_id || this.props.navigation.state.params.group_id),
});
try {
let url = `${GLOBAL.BASE_URL}/api/messages/new`;
console.log("Chat message URL : ", obj);
let res = await fetch(url, {
method: "POST",
headers: {
'Accept': 'application/json, text/plain',
'Content-Type': 'application/json',
"x-auth-token": result.password,
"x-auth-secret" : result.username,
},
body: obj,
});
}
catch (err) {
console.log("Error in saving message : ", err);
};
}
在控制台屏幕上,收到以下错误:
09-25 17:19:20.325 15181 15252 I ReactNativeJS: 'Chat message URL : ', '{"_device_id":"0cfce7b7e86fa397","sender_id":1,"sender_grpmember_id":1,"alias":"jc","socket_id":"z-8JjwQvKo6ed57KAAAB","data":{"msg_body":"hello","upload_content_info":""},"event_id":1,"_grpmember_id":1,"_group_id":"1"}'
09-25 17:19:20.345 15181 15252 I ReactNativeJS: In GiftedChat render :
09-25 17:20:35.554 15181 15252 I ReactNativeJS: 'Error in saving message : ', { [TypeError: Network request failed]
09-25 17:20:35.554 15181 15252 I ReactNativeJS: line: 24115,
09-25 17:20:35.554 15181 15252 I ReactNativeJS: column: 31,
09-25 17:20:35.554 15181 15252 I ReactNativeJS: sourceURL: 'http://10.0.2.2:8081/index.delta?platform=android&dev=true&minify=false' }
为什么return res.status(200)
会导致Network request failed
的错误?
您的请求大约需要 15 秒,如您所指, return res.status(200);
只需为响应设置 http 状态代码,以完成您将使用res.json
, res.send
或res.end
的请求。
在这种情况下,我想你只需要发送一个成功的 http 状态码是 200,
你可以使用res.sendStatus(200);
( res.sendStatus
是实现res.status
和res.send
的简写)而不是res.status(200)
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.