【问题标题】:req.body.variablename is undefined in express with body-parser middlewarereq.body.variablename 在使用 body-parser 中间件的 express 中未定义
【发布时间】:2018-08-01 00:51:42
【问题描述】:

我在我的 Nodejs 应用程序中使用 express 4.14.1 版本。我也在使用正文解析器中间件来解析表单数据,但是当我编写 console.log(req.body.variablename) 时,我在控制台上得到了 undefined。 我的代码如下

const express = require('express');
const router = express.Router();
const bodyParser = require('body-parser'); //parses information from POST
const request = require('request');
const mongodb = require('../model/mongodb.js');
const smtpTransport = require('../model/mailer.js');
const Agent = require('../model/agentmodel.js');
const config = require('../config.js');
const intent = require('../intents.js');
const ejs = require('ejs');
var app = express();
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());

// use res.render to load up an ejs view file
router.get('/chat', function(req,res){
    // res.sendFile(path.join(__dirname + '/html/' + '/index.html'));
    res.render('pages/index', { heading: config.property.userheading});         
});

// use res.render to load up an ejs view file
router.get('/', function(req,res){
  // res.sendFile(path.join(__dirname + '/html/' + '/index.html'));
  res.render('pages/helpdesk');       
});

router.post('/createTicket', function(req,res){
  console.log("create ticket is called from email support");
  console.log(req.body);
  console.log("and the details as follows ==>");
  console.log("username is ==> "+req.body.userName);
  console.log("message is ==>"+req.body.message);
  var json = {
          name :   req.body.userName,
          email :  req.body.userEmail,
          subject: 'Demo Subject',
          message:  req.body.message,
          topicId : req.body.topicId,
        };

        var options = {
          url: 'http://domainname/iprhelpdesk/upload/api/http.php/tickets.json',
          method: 'POST',
          headers: {
            'Content-Type': 'application/json',
            'X-API-Key' : 'API-key'
      },  
      json:json
    };

   request(options, function(err, res, body) {
     if (res && (res.statusCode === 200 || res.statusCode === 201)) {
       console.log("response is ==>");
       console.log(res);
     }
     else {
      console.log("error is "+err+ " = and reponse code is ="+res.statusCode );
     }
    });
   res.render('pages/message');   
});

以下是控制台的输出

从电子邮件支持调用创建票证{ '{"topicId":{"Id":12,"name":"基本知识产权查询"},"message":"我想 了解ipr","userName":"Pawan Patil","country":"IN","userEmail":"pawanpatil.rocks@gmail.com","contact":"09665714555"}': '' } 详细信息如下 ==> username is ==> undefined message 是 ==> 未定义 POST /createTicket 200 21.161 毫秒 - 104 错误为空 = 并且响应代码是=400

这就是 chrome 作为表单数据发送的内容

{"topicId":{"Id":12,"name":"基本知识产权查询"},"message":"我想 了解ipr","userName":"Jon 雪","country":"IN","userEmail":"test@test.com","contact":"0123456789"}:

请求头是

Content-Type:application/x-www-form-urlencoded

一切似乎都很完美,但我仍然在努力

未定义

当我写 console.log("username is ==> "+req.body.userName);在我的代码中。 请帮帮我

【问题讨论】:

    标签: node.js express body-parser


    【解决方案1】:

    移动那些:

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

    在此之前:

    app.use(app.router)
    

    所以你的 bodyParser 需要在路由器之前初始化。我也读过这个:

    app.use(require('connect').bodyParser());
    

    安装于:

    app.use(express.bodyParser());
    

    也可以解决未定义req.body的问题

    还有一件事要尝试:

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

    extended 设置为假而不是true

    【讨论】:

    • 将您的建议更新到我的代码中后,我仍然在控制台上未定义
    • 尝试在bodyParser app.use(router)之前定义你的应用使用路由器
    • 添加 app.use(router) 后仍然未定义
    • 对不起,请改用点.
    • 还有一件事要尝试。完全删除 app.use(app.router) ,因为您没有它并将 app.use(bodyParser.urlencoded({ extended: true })); 更改为 app.use(bodyParser.urlencoded({ extended: false})); 并放回您的 .json() 部分
    【解决方案2】:

    我已经解决了改变的问题

    Content-Type:application/x-www-form-urlencoded

    标题

    内容类型:application/json

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-25
      • 1970-01-01
      • 2014-12-27
      相关资源
      最近更新 更多