2016-08-24 141 views
0

学习表达并面临问题。在我创建模块body-parser后,开始不起作用。所有请求都是complited,但数据不解析。为什么POST的请求不解析?

let express  = require('express'); 
let bp    = require('body-parser'); 
let dishRouter  = require('./dishRouter'); 
let app   = express(); 
let hostname  = 'localhost'; 
let port   = 8080; 

dishRouter.use(bp.json()); //don't work 

app.use('/dishes', dishRouter); 
app.use(express.static(__dirname + '/public')); 
app.listen(port, hostname, function(){ 
    console.log(__dirname); 
    console.log(`Server has running at http://${hostname}:${port}`); 
}); 

//我dishRouter模块

let express = require('express'); 
let router = express.Router(); 

router.route('/') 
.all(function(req, res, next){ 
    res.writeHead(200, {'Content-type': 'text/plain'}); 
    next(); 
}) 
.get(function(req, res, next){ 
    res.end('We will dish for you'); 
}) 
.post(function(req, res, next){ 
    res.end('Will add the dish:' + req.body.name + ' with details: ' + req.body.description); 
}) 
.delete(function(req, res, next){ 
    res.end('Deleting all dishes'); 
}); 

module.exports = router; 
+1

你确定你用'Content-Type的发送您的请求:应用程序/ json'?你如何执行这些请求? – mscdex

+0

我使用邮差,当我的代码在路由模块是在一个文件与主代码,所有warks完美。现在所有的请求都可以工作,但不工作body-parser。可能是出口模块问题? –

+0

我决定这个问题。问题在我的字符串dishRouter.use。正如我认为的对象,返回express.Pouter()没有方法使用。需要写:app.use(bp.json)。想通了,这是我的错误。谢谢你们。 –

回答

0

由于这个例子中,你会错过休整后发送:

app.route('/book') 
    .get(function(req, res) { 
    res.send('Get a random book'); 
    }) 
    .post(function(req, res) { 
    res.send('Add a book'); 
    }) 
    .put(function(req, res) { 
    res.send('Update the book'); 
    }); 
+0

'.send()'不是必需的,这个代码相当于问题中的代码(它发送一个默认状态代码200,将传递的内容写入响应,然后结束响应)。 – mscdex