在 express 4.11版本里面使用router.post方法导致req.body.user是undefined。
发布于 10 年前 作者 darrenCoding 10580 次浏览 最后一次编辑是 8 年前 来自 问答
var express = require('express');
var MongoClient = require('mongodb').MongoClient;
var router = express.Router();
/* GET home page. */
router.get('/', function(req, res) {
  res.render('index', {authenticated:false,title:' MongoDB example',lang:'My first MongoDB app'});
});

router.get('/login', function(req, res) {
  res.render('login', {title:' MongoDB example',lang:'My first MongoDB app'});
});

router.get('/signup', function(req, res) {
  res.render('signup', {title:' MongoDB example',lang:'My first MongoDB app'});
});


router.get("/login/:signupEmail",function(req,res){
  res.render('login',{signupEmail:req.params.signupEmail})
})

var url = 'mongodb://localhost:27017/myproject';

router.post('/signup',function(req,res){
    MongoClient.connect(url, function(err, db) {
      console.log("Connected correctly to server");
      var collection = db.collection('users');
      console.log(req.body.user);//undefined
      collection.insert(
            req.body['user']
        ,function(err,docs){
            if(err) throw err;
            res.redirect('/login/'+docs[0].email);
            db.close();
        })
    });
})

module.exports = router;

req.body.user是undefined 我本以为在这个文件里面添加一段

var bodyParser = require('body-parser');
router.use(bodyParser.json());
router.use(bodyParser.urlencoded({ extended: false }));

这样的代码就能成功,但事实证明还是 undefined。 请各位大神帮忙解惑。

2 回复

我會這樣子除錯:

  1. 檢查瀏覽器是否有確實發送 HTTP POST request,並且正確夾帶該有的表單資料
  2. 然後在經過 bodyParser 解析過後查看 req.body 是否有資料
  3. 若沒有,開始去看 bodyParser 的 code 找出哪個部分處理表單資料的,在可疑處加上 debugger 或是用 console.log 也行

注意在构造post消息时Headers和body的写法。推荐用postman。

回到顶部