我使用命令curl -H "Content-Type: application/json" -d '{"name":"sparc_core","port":["p1", "p2"]}' http://127.0.0.1:3000/add_module测试nodejs服务器。

首先,我的代码如下:

app.post('/add_module', bodyParser.json());
app.post('/add_module', bodyParser.urlencoded());
app.post('/add_module', function(req, res, next) {
    req.body = JSON.parse(req.body.data);
    next();
});
app.post('/add_module', function(req, res) {
    console.log("Start submitting");
    console.log(req.body);
... ...


运行curl命令后,节点服务器输出错误信息如下:


  语法错误:意外的令牌u
      在Object.parse(本机)
      在Object.app.post.res.send.error [作为句柄](/home/xtec/Documents/xtec-simict/sim/app.js:80:21)
      在next_layer(/home/xtec/Documents/xtec-simict/sim/node_modules/express/lib/router/route.js:103:13)
      在Route.dispatch(/home/xtec/Documents/xtec-simict/sim/node_modules/express/lib/router/route.js:107:5)
      在/home/xtec/Documents/xtec-simict/sim/node_modules/express/lib/router/index.js:205:24
      在Function.proto.process_params(/home/xtec/Documents/xtec-simict/sim/node_modules/express/lib/router/index.js:269:12)
      在下一个(/home/xtec/Documents/xtec-simict/sim/node_modules/express/lib/router/index.js:199:19)
      在next_layer(/home/xtec/Documents/xtec-simict/sim/node_modules/express/lib/router/route.js:77:14)
      在Object.urlencodedParser [作为句柄](/home/xtec/Documents/xtec-simict/sim/node_modules/body-parser/index.js:67:27)
      在next_layer(/home/xtec/Documents/xtec-simict/sim/node_modules/express/lib/router/route.js:103:13)
  POST / add_module 500 7ms-1021b


然后,我将代码修改如下:

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
    extended: true
}));

app.post('/add_module', function(req, res) {
    console.log("Start submitting");
    console.log(req.body);
... ...


我运行相同的curl命令,效果很好!

所以我想知道app.use和app.post之间的区别。需要您的帮助,非常感谢。

最佳答案

app.use()用于包含中间件/拦截器功能,该功能将在调用api之前在实际功能执行之前执行。

有关更多详细信息,请参阅-表达官方website

例如 :

app.use(cors());
    app.post("/",function(req,res){
    });


上面的代码行等效于

app.post("/",cors(),function(req,res){
});


app.post,app.get,app.put,app.delete定义api的http方法。
请参考链接http://www.tutorialspoint.com/http/http_methods.htm以获取有关http方法的更多详细信息

就你而言

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
    extended: true
}));

app.post('/add_module', function(req, res) {
    console.log("Start submitting");
    console.log(req.body);
}


当/ add_module api被调用时,首先是bodyParser.json(),然后是bodyParser.urlencoded({
        扩展:true
    })之后被调用

 function(req, res) {
        console.log("Start submitting");
        console.log(req.body);}


叫做 。
需要bodyParser.json()和bodyParse.urlencoded({extended:true})从调用的函数(req,res)中的请求中获取主体对象

09-17 02:06