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

时间:2018-07-02 15:52:32

标签: 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');
 });

这是我的网址:

http://localhost:4001/device/1?{"type":"fridge","pcb"=2.4}

我在解析行上遇到错误。

以下是所请求的错误:

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

我也尝试过:

app.get('/device/:id', (req, res, next) => {
    let query = url.parse(req.url).query;
    if( query ) {
        let parsedContent = JSON.parse(decodeURIComponent(query));
    }
});

使用此网址:

http://localhost:4001/device/1??type=fridge&pcb=2.4

还是同样的问题。

2 个答案:

答案 0 :(得分:1)

如果要在请求中发送json数据,最好使用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请求,则需要先对查询参数进行编码,然后再将其发送到服务器。

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)的身份访问它

答案 1 :(得分:0)

您的网址应为:

caret

您无法像在URL中一样编写查询。它必须遵循格式。

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

所以# Create example dataset set.seed(0) user_id <- rep(1:10, sample(1:10, 10)) df <- data.frame(user_id = user_id, vals = runif(length(user_id))) # Sort by user id df <- df[order(df$user_id),] # For each user ID, Create logical index which is T for ~80% of rows split.lgl <- lapply(unique(df$user_id), function(x){ n.rows <- sum(df$user_id == x) sample(n.rows) <= 0.8*n.rows}) # subset train <- df[do.call(c, split.lgl),] ....

您的需求查询将是:

http://localhost:4001/device/1?type=fridge&pcb=2.4