json - 通过 JSON 对象的 POST 请求

标签 json node.js post request

我创建了一个服务器来为客户端提供发布请求。我正在使用 bodyserver,但出现一些错误

var bodyParser = require('body-parser')
     var express = require('express');
        var app = express();

app.use(bodyParser.json());

app.post('/v3/botstate/:channel/users/:userid', function (req, res) {
    console.log("hsijdaf");
    console.log(req.body);
    //console.log(req.body);        

 //  res.send('Hello POST');

})
var server = app.listen(8081, function () {

  var host = server.address().address
  var port = server.address().port

  console.log("Example app listening at http://%s:%s", host, port)

})

客户端如下所示,

var request = require('request');
request.post({
            url: "http://localhost:8081/v3/botstate/webchat/users/siddiq",
           headers: {
                "Content-Type": "application/json"
            },
            body: '{"jsonrpc":"2.0","id":"zdoLXrB5IkwQzwV2wBoj","method":"barrister-idl","params":[]}',
            json:true
}, function(error, response, body){
console.log(error);
console.log(JSON.stringify(response));
  console.log(body);
});

运行客户端时出现以下错误,

E:\TESTING>node exp.js
Example app listening at http://:::8081
SyntaxError: Unexpected token "
    at parse (E:\TESTING\node_modules\body-parser\lib\types\json.js:83:15)
    at E:\TESTING\node_modules\body-parser\lib\read.js:116:18
    at invokeCallback (E:\TESTING\node_modules\body-parser\node_modules\raw-body\index.js:262:16)
    at done (E:\TESTING\node_modules\body-parser\node_modules\raw-body\index.js:251:7)
    at IncomingMessage.onEnd (E:\TESTING\node_modules\body-parser\node_modules\raw-body\index.js:307:7)
    at emitNone (events.js:67:13)
    at IncomingMessage.emit (events.js:166:7)
    at endReadableNT (_stream_readable.js:921:12)
    at nextTickCallbackWith2Args (node.js:442:9)
    at process._tickCallback (node.js:356:17)

请帮我解决这个问题。

最佳答案

您已在客户端中设置了 Content-Type : application/json,但您的 POST 数据是 text/plain,而不是 json.这就是为什么 body-parser 无法解析它,因为它期望通过 header 得到 json

从客户端的 body 中删除 ' ' 后尝试。

例如

var request = require('request');
request.post({
     url: "http://localhost:8081/v3/botstate/webchat/users/siddiq",
     headers: {
        "Content-Type": "application/json"
     },
     body: {
       "jsonrpc":"2.0",
       "id":"zdoLXrB5IkwQzwV2wBoj",
       "method":"barrister-idl",
       "params":[]
     },
     json:true
}, function(error, response, body){
   console.log(error);
   console.log(JSON.stringify(response));
   console.log(body);
});

希望对您有帮助。

关于json - 通过 JSON 对象的 POST 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41227574/

相关文章:

javascript - 为什么 "[[1, 2], [3, 4]].indexOf([1, 2])"返回-1?

ajax - 为什么有多种 HTTP 方法可用?

javascript - 使用 AJAX 解析 JSON

php - 使用 php 将多维数组从多个表转换为单个 json 数组值

Javascript:将字符串路径转换为格式化数组

php - jQuery - 现在是 : Creating an object and storing values in it to pass to an AJAX call

rest - 使用 REST 发布项目列表

java - JSON 到 Java 对象

java - 在 Java 中将 JSON 字符串转换为文件

node.js - 使用 Node js 的 RESTful Web 服务