【问题标题】:Cannot get body-parser to return anything无法让正文解析器返回任何内容
【发布时间】:2017-01-29 05:34:03
【问题描述】:

我现在已经阅读了 stackoverflow 的 dussins 帖子,但我的 bodyparser 无法正常工作。为了不使事情复杂化,我改成了我能想象到的最简单的事情,即下面的代码,只涉及解析一个单一的路线。有人能看出问题吗?

路由/login.js

var express = require('express');
var router = express.Router();
var bodyParser = require('body-parser');

router.get('/', (req, res) => {
        res.send('<form method="POST" action="'+ req.originalUrl +'"><input type="text" id="personalNumber" autocomplete="off"><input type="submit" value="Log in"></form>');
        res.end();
});

router.post('/', bodyParser.urlencoded({ extended: false }), (req, res) => {
        console.log('personal', req.body, req.personalNumber, res.body, req.headers);
        res.send('personal', req.body, req.personalNumber, res.body, JSON.stringify(req.headers));
        res.end();
});

module.exports = router;

server.js 简化

var express = require('express');
var app = express();

var login = require(__dirname + '/routes/login');
app.use('/login', login);

app.listen(80, () => {
        console.log('Listening on port 80');
});

转到 /login,在输入中输入任何内容并提交(触发到 /login 的帖子)将使用以下控制台输出:

Listening on port 80
personal {} undefined undefined { host: 'localhost',
  connection: 'keep-alive',
  'content-length': '0',
  pragma: 'no-cache',
  'cache-control': 'no-cache',
  origin: 'http://localhost',
  'upgrade-insecure-requests': '1',
  'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36',
  'content-type': 'application/x-www-form-urlencoded',
  accept: 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
  referer: 'http://localhost/login',
  'accept-encoding': 'gzip, deflate',
  'accept-language': 'en-US,en;q=0.8,sv;q=0.6' }

req.body 的预期输出将包含有关表单数据的一些信息。

req.body = {
    personalNumber: 'inputData'
};

【问题讨论】:

  • 您应该更具体地了解正在发生的事情。展示代码的作用与您期望的不同
  • 您的控制台是否在命令提示符中显示您的预期结果?
  • ...还是running on port 80 有问题?
  • 更新了问题。我希望它有助于解开这个谜。

标签: node.js express body-parser


【解决方案1】:

body-parser 在所有routes 之前添加到您的主文件中时可以正常工作

所以在server.js文件中创建express的对象后放入如下代码

var app = express();

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

【讨论】:

    【解决方案2】:
        var express = require('express');
        var router = express.Router();
        var bodyParser = require('body-parser');
        router.urlencoded({ extended: false });
        router.use(bodyParser.json());
        router.get('/', (req, res) => {
                res.send('<form method="POST" action="'+ req.originalUrl +'"><input type="text" id="username" autocomplete="off"><input type="submit" value="Log in"></form>');
                res.end();
        });
    
        router.post('/', (req, res) => {
                console.log('personal', req.body, req.personalNumber, res.body, req.headers);
                res.send('personal', req.body, req.personalNumber, res.body, JSON.stringify(req.headers));
                res.end();
        });
    
        module.exports = router;
    

    试试这个,可能有用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-18
      • 1970-01-01
      • 2021-04-22
      • 2019-05-16
      • 1970-01-01
      相关资源
      最近更新 更多