Javascript 如何在node.js服务中调用POST方法?
我试图用jsonschema验证我的json。这是我的server.js代码: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
// 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> at Object.parse (native)
<br> at parse (c:\nodestuff\trystuff\node_modules\body-parser\lib\types\json.js:88:17)
<br> at c:\nodestuff\trystuff\node_modules\body-parser\lib\read.js:108:18
<br> at done (c:\nodestuff\trystuff\node_modules\body-parser\node_modules\raw-body\index.js:233:14)
<br> at IncomingMessage.onEnd (c:\nodestuff\trystuff\node_modules\body-parser\node_modules\raw-body\index.js:279:7)
<br> at IncomingMessage.g (events.js:180:16)
<br> at IncomingMessage.emit (events.js:117:20)
<br> at _stream_readable.js:943:16
<br> 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头,我现在删除了它!