如何使用Express从Node.js中的url获取JSON数据
我正在尝试使用Express从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'); }); 这是我的
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');
});