首页 文章

TypeError:POST(MEAN)后无法读取未定义的属性“body”

提问于
浏览
3

我正在尝试将 AngularJS 的 POST 数据发送到 Express。我现在正在做的是尝试通过 curl 发送一些 POST 内容。

我已经尝试过发送数据了。它被发送,我得到 200 作为回应。但每当我尝试通过 body-parser 到 req.body 来访问数据时,我会得到一个 500,并且我在最底部发布了错误。

我对此事进行了大量研究(过去 4-5 hours...),我认为我检查了以下常见问题:

  • 我使用某种请求解析器:body-parser

  • 在要求路由之前,我将 app.use(...)与 body-parser 中间件放在一起

  • 我明确告诉 POST 使用了什么 Content-Type

  • 我试过 application/json 和 application/x-www-form-urlencoded

我投降。 StackOverflowers。请帮帮我。

卷曲:

curl -X POST -H "Content-Type: application/json" -d '{"username": "gala", "email": "ga@ga.g", "password": "123"}' localhost:3000/users

express.js

// glowny plik przygotowujacy aplikacje express

// wczytanie zaleznosci
var express = require('express')
var stylus = require('stylus')
var parser = require('body-parser')
var morgan = require('morgan')
var compress = require('compression')
var methodOverride = require('method-override')

// przygotowanie aplikacji, obsluga middleware i na koncu zwrocenie obiektu aplikacji
module.exports = function() {
    var app = express()

    if (process.env.NODE_ENV === 'development') {
        app.use(morgan('dev'))
    } else if (process.env.NODE_ENV === 'production') {
        app.use(compress())
    }

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

    app.use(methodOverride())

    // uzycie jade jako silnika szablonow dla html
    app.set('views', __dirroot + '/app/views')
    app.set('view engine', 'jade')

    require(__dirroot + '/app/routes/index.server.route.js')(app)
    require(__dirroot + '/app/routes/users.server.route.js')(app)

    // mozliwosci uzywania statycznych plikow z folderu /public
    app.use(express.static(__dirroot + '/public'))

    return app
}

users.server.route.js:

var users = require(__dirroot + '/app/controllers/users.server.controller.js')

module.exports = function(app) {
    app.route('/users').post(function() {
        users.create()
    })
}

users.server.controller.js:

var User = require('mongoose').model('User')

exports.create = function(req, res, next) {
    console.log(req.body)
}

错误信息:

TypeError: Cannot read property 'body' of undefined
   at Object.exports.create (/home/gala/Projekty/cantr-crafting/app/controllers/users.server.controller.js:4:20)
   at /home/gala/Projekty/cantr-crafting/app/routes/users.server.route.js:5:15
   at Layer.handle [as handle_request] (/home/gala/Projekty/cantr-crafting/node_modules/express/lib/router/layer.js:82:5)
   at next (/home/gala/Projekty/cantr-crafting/node_modules/express/lib/router/route.js:110:13)
   at Route.dispatch (/home/gala/Projekty/cantr-crafting/node_modules/express/lib/router/route.js:91:3)
   at Layer.handle [as handle_request] (/home/gala/Projekty/cantr-crafting/node_modules/express/lib/router/layer.js:82:5)
   at /home/gala/Projekty/cantr-crafting/node_modules/express/lib/router/index.js:267:22
   at Function.proto.process_params (/home/gala/Projekty/cantr-crafting/node_modules/express/lib/router/index.js:321:12)
   at next (/home/gala/Projekty/cantr-crafting/node_modules/express/lib/router/index.js:261:10)
   at methodOverride (/home/gala/Projekty/cantr-crafting/node_modules/method-override/index.js:77:5)

3 回答

  • 6

    我不使用 Node 或 Express 很多但是你不应该至少将req从路由处理程序传递到users.create(),即

    app.route('/users').post(function(req, res) {
        users.create(req, res)
    })
    

    或者甚至是

    app.route('/users').post(users.create);
    
  • 1

    **TypeError:在 POST(MEAN)后无法读取未定义的属性'body'**当你的 localhost ip 被更改或者你在 post url 中提到的请求 ip 不正确时你会得到这个错误。我在排除以太网故障时遇到了同样的错误。然后我的 IP 地址被更改了。所以检查你的 IP。它会工作..

  • 0

    这种情况发生在我身上,因为我在 chrome 控制台上添加了一些测试脚本,看起来有干扰。您手动清理控制台或在另一个实例 f chrome 中运行您的应用程序。

相关问题