Flutter Dart HTTP POST请求主体在服务器端为空

时间:2019-09-06 14:28:00

标签: flutter dart

我正在使用Flutter平板电脑应用程序。输入一个输入字段后,我正在尝试向服务器发送发布请求。以下是我为此调用的方法:

2019/09/06 14:23:22 [emerg] 1#1: invalid URL prefix in /etc/nginx/conf.d/nginx.conf:11
nginx: [emerg] invalid URL prefix in /etc/nginx/conf.d/nginx.conf:11

在NodeJs服务器端,我有这个:

    Future < http.Response > _postRequest() async {
    print(globals.novaCoord.toString() + ' XYZXYZXYZXYZXYZ');

    var url = globals.URL + 'api/nova_position';

    Map data = {
      'id_nova': '1',
      'position.x': '1',
      'position.y': '1',
      'position.z': '1',
      'position.pitch': '1',
      'position.yaw': '1',
      'position.roll': '1',
    };
    //encode Map to JSON
    var body = json.encode(data);

    http.Response response = await http.post(url,
      headers: {
        "Content-Type": "application/json"
      },
      body: body
    );
    print("${response.statusCode}");
    print("${response.body}");
    return response;
  }

但是,在服务器端,我收到的空“ body”是我发送的请求,并且出现以下错误:

app.post('/api/nova_position/', async (req,res) => {
    console.log("NOVA POSITION");
    console.log(req.body.id_nova);
    const id_nova = req.body.id_nova;
    const x = req.body.position.x;
    const y = req.body.position.y;
    const z = req.body.position.z;
    const pitch = req.body.position.pitch;
    const yaw = req.body.position.yaw;
    const roll = req.body.position.roll;

    const position = await db.db.create_position(id_nova,x,y,z,pitch,yaw,roll);
});

这时我需要帮助。感谢您的帮助和指导。

谢谢

3 个答案:

答案 0 :(得分:1)

Map<String,dynamic>发送http.post不会正确发送您的数据。

要解决此问题,请将标头的内容类型更改为:

Map<String, String> customHeaders = {
...
"content-type": "application/json"
...
};

然后,您可以按以下方式使用http.post

http.post(url, headers: customHeaders, body);

答案 1 :(得分:1)

我发现的解决方案只是将Content-Length : x添加到标题中,而x是json正文的大小。

答案 2 :(得分:0)

您必须先进行jsonEncode,然后再发送到Post请求中 像

String bodyF = jsonEncode(body);

我希望您能得到解决方案。