Javascript 如何在node.js服务中调用POST方法?

Javascript 如何在node.js服务中调用POST方法?,javascript,node.js,Javascript,Node.js,我试图用jsonschema验证我的json。这是我的server.js代码: // set up ====================================================================== var express = require('express'); var app = express(); // create our app w/ express var port

我试图用jsonschema验证我的json。这是我的server.js代码:

// set up ======================================================================
var express  = require('express');
var app      = express();                               // create our app w/ express
var port     = process.env.PORT || 8080;                // set the port
var bodyParser = require('body-parser');
var methodOverride = require('method-override')

app.use(function(req, res, next) {
    //the code hits this point!
    var data = '';
    req.on('data', function(chunk) {
        data += chunk;
    });
    req.on('end', function() {
        req.rawBody = data;

    });
    console.log(data);
    next();
});
app.use(bodyParser.json());
app.use(methodOverride());

// routes ======================================================================
require('./routes.js')(app);

// listen (start app with node server.js) ======================================
app.listen(port);
console.log("App listening on port " + port);
routes.js如下所示:

module.exports = function (app) {
    app.post('/api/postding',  function (req, res) {
            //do some schema validation
        var test=1;
    })
}
当我发布无效的json时,我现在收到以下错误:

SyntaxError: Unexpected token t
<br> &nbsp; &nbsp;at Object.parse (native)
    <br> &nbsp; &nbsp;at parse (c:\nodestuff\trystuff\node_modules\body-parser\lib\types\json.js:88:17)
        <br> &nbsp; &nbsp;at c:\nodestuff\trystuff\node_modules\body-parser\lib\read.js:108:18
            <br> &nbsp; &nbsp;at done (c:\nodestuff\trystuff\node_modules\body-parser\node_modules\raw-body\index.js:233:14)
                <br> &nbsp; &nbsp;at IncomingMessage.onEnd (c:\nodestuff\trystuff\node_modules\body-parser\node_modules\raw-body\index.js:279:7)
                    <br> &nbsp; &nbsp;at IncomingMessage.g (events.js:180:16)
                        <br> &nbsp; &nbsp;at IncomingMessage.emit (events.js:117:20)
                            <br> &nbsp; &nbsp;at _stream_readable.js:943:16
                                <br> &nbsp; &nbsp;at process._tickCallback (node.js:419:13)
语法错误:意外的标记t

at Object.parse(本机)
解析时(c:\nodestuff\trystuff\node\u modules\body parser\lib\types\json.js:88:17)
在c:\nodestuff\trystuff\node\u modules\body parser\lib\read.js:108:18
完成时(c:\nodestuff\trystuff\node\u modules\body parser\node\u modules\raw body\index.js:233:14)
在IncomingMessage.onEnd(c:\nodestuff\trystuff\node\u modules\body parser\node\u modules\raw body\index.js:279:7)
在IncomingMessage.g(events.js:180:16)
在IncomingMessage.emit(events.js:117:20)
在_stream_readable.js:943:16
在进程中调用(node.js:419:13)
问题是我如何才能为我的postrequest执行jsonschema验证?

server.js

// set up ======================================================================
var express  = require('express');
var app      = express();                               // create our app w/ express
var port     = process.env.PORT || 8080;                // set the port
var bodyParser = require('body-parser');
var methodOverride = require('method-override')
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: true}));

app.use(function(req, res, next) {
    //the code hits this point!
    var data = '';
    req.on('data', function(chunk) {
        data += chunk;
    });
    req.on('end', function() {
        req.rawBody = data;
        next();
    });
    console.log(data);
});
app.use(methodOverride());
// routes ======================================================================
require('./routes.js')(app);

// listen (start app with node server.js) ======================================
app.listen(port);
console.log("App listening on port " + port);
route.js

module.exports = function (app) {
    app.post('/api/postding',  function (req, res) {
        console.log(req.body);
        console.log(req.rawBody);
        res.send({"test":"data"});
    })
}
这是我的电脑工作

当我通过REST客户机发布{“name:”hoer}时,控制台输出为

App listening on port 8080

{}
{"name:"hoer"}

尝试移动
app.use(bodyParser.json());
右下方
var methodoverride…
为什么要在整个原始请求中读取,而不是让
bodyParser.json()
处理请求数据?我希望收到原始请求,以便在帖子中执行jsonschema验证method@BidhanA我试过了,但没有成功。我试过你的代码,我把console.log放在routes.js中……你的工作正常(检查拼写错误)……把res.send({test:“message”})放进去;在var test=1行之后;这将向客户端提供响应您的意思是什么?在哪里使用?查看我的工作代码相同的代码,实际上您可以将app.Use()按不重要的任何顺序放置现在尝试发布此无效的json:{“name:”hoer}。现在发生了什么?我添加了console.log(req.rawBody);在router.js中,检查我的编辑和输出。可能您试图在本地删除“node_modules”文件夹,并在不使用-git的情况下安装express、body parser、method override,我现在传入了一个application/json头,我现在删除了它!