8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

Express.js req.body 未定义

arpho 1月前

100 0

我将此作为我的 Express 服务器的配置app.use(app.router); app.use(express.cookieParser());app.use(express.session({ secret: \'keyboard cat\' }));app.set('view engine', 'ejs');app.set(\'

我有这个作为我的 Express 服务器的配置

app.use(app.router); 
app.use(express.cookieParser());
app.use(express.session({ secret: "keyboard cat" }));
app.set('view engine', 'ejs');
app.set("view options", { layout: true });
//Handles post requests
app.use(express.bodyParser());
//Handles put requests
app.use(express.methodOverride());

但是当我在路线中请求时,仍然 req.body.something 会收到一些错误,指出 body is undefined 。以下是使用路线的示例 req.body

app.post('/admin', function(req, res){
    console.log(req.body.name);
});

我读到这个问题是由于缺少而引起的 app.use(express.bodyParser()); ,但正如你所看到的,我在路线之前调用它。

有什么线索吗?

帖子版权声明 1、本帖标题:Express.js req.body 未定义
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由arpho在本站《rest》版块原创发布, 转载请注明出处!
最新回复 (0)
  • Toru 1月前 0 只看Ta
    引用 2

    这实际上并不是解决您问题的方法,但由于这是来自谷歌的第一个线程,我将在这里说明,确保没有使用其他行为不当的中间件。

  • 正如在一条评论下发布的那样,我使用以下方法解决了这个问题

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

    而不是

    app.use(express.bodyParser());
    

    我还是不知道为什么简单的 express.bodyParser() 不起作用......

  • @Masiar 这对我来说不起作用。我正在使用 expressjs 4,并且我得到了这样的错误。错误:找不到模块“connect”

  • @JeyTheva 我的解决方案很老了,因此现在情况可能已经发生了变化。我建议您尝试通过 npm install connect 安装 connect 模块并重试。这是我通过阅读您的错误输出唯一能想到的。

  • 这是解决该问题的最新文档:npmjs.com/package/body-parser 对于遇到此问题“post express 4”的其他人,对我有用的是将 Content-Type 标头设置为 application/json。

  • 这是解决此问题的最新文档:npmjs.com/package/body-parser 安装 body-parser 后,它仍然不起作用。起作用的方法是,在执行请求时将 Content-Type 标头设置为 application/json。

  • 正如@GrantEagon 所建议的,请求中的 application/json 与 text/json 有效。

  • 2020 年 7 月更新

    express.bodyParser() 不再作为 express 的一部分捆绑。加载前需要单独安装:

    npm i body-parser

    
    // then in your app
    var express = require('express')
    var bodyParser = require('body-parser')
     
    var app = express()
     
    // create application/json parser
    var jsonParser = bodyParser.json()
     
    // create application/x-www-form-urlencoded parser
    var urlencodedParser = bodyParser.urlencoded({ extended: false })
     
    // POST /login gets urlencoded bodies
    app.post('/login', urlencodedParser, function (req, res) {
      res.send('welcome, ' + req.body.username)
    })
     
    // POST /api/users gets JSON bodies
    app.post('/api/users', jsonParser, function (req, res) {
      // create user in req.body
    })
    

    请参阅 此处 了解更多信息

    原文如下

    您必须确保在定义路由之前定义所有配置。如果这样做,您可以继续使用 express.bodyParser() .

    例如:

    var express = require('express'),
        app     = express(),
        port    = parseInt(process.env.PORT, 10) || 8080;
    
    app.configure(function(){
      app.use(express.bodyParser());
    });
    
    app.listen(port);
        
    app.post("/someRoute", function(req, res) {
      console.log(req.body);
      res.send({ status: 'SUCCESS' });
    });
    
  • 这对我来说很管用。注意:不幸的是,有些教程中有人(像我一样)将路由放在 app.configure() 之前。在我的例子中,这是 app.get/post 等形式,并且 require() 包括它们。

  • 从 express 4 开始,app.use(app.router) 已被删除。请参阅文档 github.com/visionmedia/express/wiki/New-features-in-4.x

  • 从 express 4 开始,bodyParser 等中间件不再与 Express 捆绑在一起,必须单独安装。您可以在此处找到更多信息:github.com/senchalabs/connect#middleware。

  • 看起来你的第二部分是我的问题的解决方案,我有一个在 body-parser 之前导入的 mail.js 模块。但奇怪的是,因为我在 mail.js 本身中添加了 body-parser 中间件。

  • 从 4.16.0 版开始,Express 直接从 bodyParser 公开了 json() 和 urlencoded() 中间件,因此,如果只需要这两个中间件,您只需从 \'express\'; 导入 { json } 即可。有什么理由不这样做吗?

  • 最新版本的 Express(4.x)已将中间件从核心框架中分离出来。如果您需要 body parser,则需要单独安装

    npm install body-parser --save
    

    然后在你的代码中执行此操作

    var bodyParser = require('body-parser')
    var app = express()
    
    // parse application/x-www-form-urlencoded
    app.use(bodyParser.urlencoded({ extended: false }))
    
    // parse application/json
    app.use(bodyParser.json())
    
  • 我最近更新到了 express 4.x。最初,当我尝试记录 req.body 时,它显示未定义。安装并使用 body-parser 后,它给出了预期的 req.body 值。:)

  • 当我尝试弄清楚为什么我的 POST 请求无法与 json-server 一起工作时,我发现这很有用。

  • app.use(bodyParser.urlencoded({ extended: false })); app.use(bodyParser.json()) 救了我!!

  • 虽然确实如此,但您还必须确保在添加路由之前进行解析器配置。我已经完成了 express 4.x 的操作,但在设置解析后添加路由对我来说意义重大。

  • Express 4 已内置 body 解析器。无需安装单独的 body-parser。因此以下内容将起作用:

    export const app = express();
    app.use(express.json());
    
返回
作者最近主题: