在Node.js POST body / json上重新启动

时间:2014-03-05 20:53:21

标签: json node.js restify

我需要帮助。我正在将json数据发布到我的节点服务器。节点服务器正在使用RESTify作为其API。我无法从发布数据的正文中获取req.body.name

发布的数据包含一个json正文。在其中我有姓名,日期,地址,电子邮件等密钥。

我想从json体中取出这个名字。我正在尝试req.body.name,但它无效。

我还包括server.use(restify.bodyParser());,但它无效。

我可以req.params.name并分配一个值。但是,如果我发布json数据,如:{'food': 'ice cream', 'drink' : 'coke'},我将得到未定义。但是,如果我req.body,我会发布完整的json身体。我希望能够专门获得像'drink'这样的项目并在console.log上显示该项目。

var restify = require('restify');
var server = restify.createServer({
  name: 'Hello World!',
  version: '1.0.0'
});

server.use(restify.acceptParser(server.acceptable));
server.use(restify.jsonp());
server.use(restify.bodyParser({ mapParams: false }));

server.post('/locations/:name', function(req, res, next){
var name_value  = req.params.name;
res.contentType = 'json';

console.log(req.params.name_value);
console.log(req.body.test);
});

server.listen(8080, function () {
  console.log('%s listening at %s', server.name, server.url);
});

5 个答案:

答案 0 :(得分:8)

如果您想使用req.params,则应更改:

server.use(restify.bodyParser({ mapParams: false }));

使用true:

server.use(restify.bodyParser({ mapParams: true }));

答案 1 :(得分:4)

您是否尝试使用标准JSON库将主体解析为json对象?然后,你应该能够获得你需要的任何财产。

var jsonBody = JSON.parse(req.body);
console.log(jsonBody.name);

答案 2 :(得分:2)

除了以下答案。 restify 5.0中的最新语法已经改变。

您要查找的所有解析器都在restify.plugins内,而不是restify使用restify.plugins.bodyParser

使用它的方法是这样的。

const restify = require("restify");


global.server = restify.createServer();
server.use(restify.plugins.queryParser({
 mapParams: true
}));
server.use(restify.plugins.bodyParser({
mapParams: true
 }));
server.use(restify.plugins.acceptParser(server.acceptable));

答案 3 :(得分:0)

你必须在bodyParser激活的情况下使用req.params。

var restify = require('restify');

var server = restify.createServer({
  name: 'helloworld'
});

server.use(restify.bodyParser());


server.post({path: '/hello/:name'}, function(req, res, next) {
    console.log(req.params);
    res.send('<p>Olá</p>');
});

server.get({path: '/hello/:name', name: 'GetFoo'}, function respond(req, res, next) {
  res.send({
    hello: req.params.name
  });
  return next();
});

server.listen(8080, function() {
  console.log('listening: %s', server.url);
});

答案 4 :(得分:0)

<?php
$result = [];
$color_index = 0;
foreach ($letters as $i => $letter) {
    $pagenum = $i + 1;
    for ($j = 1; $j <= $colorsperpage; $j++) {
        $key = sprintf("%s%d-%02d", $letter, $pagenum, $j);
        $colorcode = $hexValues[$color_index++];
        $result[$key] = $colorcode;
    }
}
file_put_contents("colorbook.js", "var color = " . json_encode($result));

...是什么对我来说适用于Restify版本8.3.2