最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

Nodejs中的返回状态导致网络请求失败

IT培训 admin 4浏览 0评论

Nodejs中的返回状态导致网络请求失败

这是一个关于Nodejs(10.16)和express(4.16.4)中收益的新手问题,前端是本机0.59。这是成功查询后返回状态200的Node.js服务器上的代码:

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);
    };

});

以上代码在本机代码中与以下代码一起调用:

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: ':8081/index.delta?platform=android&dev=true&minify=false' }

为什么return res.status(200)导致Network request failed错误?

回答如下:

您指出,您的请求大约需要15秒,return res.status(200);仅设置响应的http状态代码,要完成请求,您可以使用res.jsonres.sendres.end

在这种情况下,我认为您只需要发送http状态代码为200的成功消息,就可以了>]

您可以使用res.sendStatus(200);res.sendStatus是实现res.statusres.send的简写,而不是res.status(200)

Nodejs中的返回状态导致网络请求失败

这是一个关于Nodejs(10.16)和express(4.16.4)中收益的新手问题,前端是本机0.59。这是成功查询后返回状态200的Node.js服务器上的代码:

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);
    };

});

以上代码在本机代码中与以下代码一起调用:

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: ':8081/index.delta?platform=android&dev=true&minify=false' }

为什么return res.status(200)导致Network request failed错误?

回答如下:

您指出,您的请求大约需要15秒,return res.status(200);仅设置响应的http状态代码,要完成请求,您可以使用res.jsonres.sendres.end

在这种情况下,我认为您只需要发送http状态代码为200的成功消息,就可以了>]

您可以使用res.sendStatus(200);res.sendStatus是实现res.statusres.send的简写,而不是res.status(200)

发布评论

评论列表 (0)

  1. 暂无评论