如何使用Express从Node.js中的url获取JSON数据

如何使用Express从Node.js中的url获取JSON数据,json,node.js,express,Json,Node.js,Express,我正在尝试使用Express从url获取Json对象: 这是我的代码: app.get('/device/:id', (req, res, next) => { console.log('device: ' + req.params.id + ' Request received'); let parsedContent = JSON.parse(req.query); //res.status(201).send('success'); }); 这是我的

我正在尝试使用Express从url获取Json对象:

这是我的代码:

app.get('/device/:id', (req, res, next) => {
     console.log('device: ' + req.params.id + ' Request received');
     let parsedContent = JSON.parse(req.query);
     //res.status(201).send('success');
 });
这是我的网址:

http://localhost:4001/device/1?{"type":"fridge","pcb"=2.4}
我在分析行中遇到一个错误

以下是请求的错误:

SyntaxError: Unexpected token o in JSON at position 1
  at JSON.parse (<anonymous>)
使用此url:

http://localhost:4001/device/1??type=fridge&pcb=2.4
仍然是相同的问题。

您的url应该是:

http://localhost:4001/device/1?type=fridge&pcb=2.4
您不能像在url中那样编写查询。它必须遵循格式

??描述查询的开始。然后将键值对设置为key=value,如果有许多键值对,则使用single&

所以
?key1=val1&key2=val2&key3=val3

您的req.query将是:

{"type":"fridge","pcb"=2.4}

如果您想在请求中发送json数据,最好使用
POST
request。然后服务器应该接受post数据

var bodyParser = require('body-parser')
app.use( bodyParser.json() );       // to support JSON-encoded bodies
app.use(bodyParser.urlencoded({     // to support URL-encoded bodies
    extended: true
}));

...

app.post('/device/:id', (req, res, next) => {
   console.log('device: ' + req.params.id + ' Request received');
   let parsedContent = JSON.parse(req.query);
   let payload = req.body.payload; // your json data
   //res.status(201).send('success');
});
如果坚持使用
GET
request,则需要在将查询参数发送到服务器之前对其进行URL编码

http://localhost:4001/device/1?payload=%7B%22type%22%3A%22fridge%22%2C%22pcb%22%3D2.4%7D


在您的服务器代码中,您可以访问它作为
let payload=JSON.parse(req.query.payload)

您可以添加更多信息和您得到的错误吗?它是设备而不是devhello,谢谢您的快速回复。我需要发送一个Json格式的Json对象。这意味着是一个http请求,而不是一个not url。如果您以这种方式传递它,那么您的对象就是jsonHello,谢谢您的回复。我想我更喜欢你的方法。下一票:POST有不同的语义。还考虑缓存/代理处理。@ L10000为什么?答案包含在
POST
GET
中使用的方法。还有,为什么要介绍OP不需要的东西。如果你有任何观点,你可以随时补充答案。
var bodyParser = require('body-parser')
app.use( bodyParser.json() );       // to support JSON-encoded bodies
app.use(bodyParser.urlencoded({     // to support URL-encoded bodies
    extended: true
}));

...

app.post('/device/:id', (req, res, next) => {
   console.log('device: ' + req.params.id + ' Request received');
   let parsedContent = JSON.parse(req.query);
   let payload = req.body.payload; // your json data
   //res.status(201).send('success');
});