2017-07-29 101 views
0

我正在用Node.js,Express.js和MongoDB構建一個API。當我提交表單並在路由中使用req對象時,req.body對象爲空。請求正文在Express路由中爲空

req.body返回{}當我通過瀏覽器調用get_user函數使用郵遞員在https://localhost:3000/users/0

app.js

var express = require('express'), 
    app = express(), 
    port = process.env.PORT || 3000, 
    bodyParser = require('body-parser'); 

var mongo_server = require('./server') 

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

var routes = require('./routes/users') 
routes(app); 

app.use(function(req, res) { 
    res.status(404).send({url: req.originalUrl + ' not found'}); 
}); 

app.listen(port); 

mongo_server.mongo_connection 

module.exports = app; 

userController.js

var mongoose = require('mongoose'), 
    user = mongoose.model('users'); 

exports.get_user = function(req, res) { 
    console.log(req.body.id); 
    user.findById(req.body.id, function(err, user) { 
     console.log(req.body); 
     if(err) 
      res.send(err); 
      res.json(user); 
     }); 
    }; 

userRoutes.js

module.exports = function(app) { 
    var users = require('../controllers/userController'); 
    app.route('/users/:userid') 
     .get(users.get_user); 
} 
+0

你通過郵遞員發送給服務器的是什麼? –

回答

2

我想你混淆請求參數和請求主體。請求主體是當你喜歡一個有效載荷發送請求信息,比如在POST請求時您JSON發送到服務器,例如,創建一個新用戶:

{ 
    "username": "jd123", 
    "email": "[email protected]", 
    "name": "John Doe" 
} 

但在你的情況,您正在尋找參數,東西通過URL傳遞,就像你設置:

/users/:userid 

這讓你導航到一個GET請求:

/users/0 

然後你可以從req.params.userid而不是req.body.id得到0作爲字符串。請求參數和主體是不同的。這些參數用於導航到不同的路線,例如用戶個人資料頁面,其中的URL會變化,並反映您想要通過用戶ID訪問哪條路線。

機構用於請求的有效負載,例如POSTing,PATCHing和PUTing,提供有關在服務器上更新或創建的信息。

+0

謝謝,你是對的!我對請求參數感到困惑。 – user3583158