通过POST将Angular变量传递给Express后端

时间:2016-11-09 19:09:37

标签: javascript angularjs node.js express

req.body始终为空。我不确定自己做错了什么?我尝试将内容类型标题添加为json,但也没有做任何事情。有人能指引我走向正确的方向吗?谢谢

编辑:为了澄清目的,我的Angular前端成功点击了后端函数,但是req.body是空的。如果我理解了一切,如果我正在使用'身体解析器'图书馆,应通过邮件通过“req.body”传递。我只是没有看到,但我不确定为什么。

EDIT2:我的app.js中有正文解析器代码但是index.js文件中的后端路由,这与它有什么关系吗?

EDIT3:app.js http://pastebin.com/9vNgf0Nd index.js http://pastebin.com/icLa3e2X

ANGULAR FRONTEND

service.registerAccount = function(account) {
        console.log(account);  //account = { userName: 'test', password: 'hello' }
        return $http({
            method: 'POST',
            url: '/register',
            data: { account: account },
            headers: {'Content-Type': 'application/json'}
        });
    }

BACKEND(app.js)

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

BACKEND(index.js)

var express = require('express');
var router = express.Router();    

router.post('/register', function(req, res) {
  console.log(req.body);
};

4 个答案:

答案 0 :(得分:2)

请删除此行

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

此外,

app.use(bodyParser.json());
必须在app.use('/', routes);

之前调用

并确保将Content-Type:application / json添加到请求标头

答案 1 :(得分:1)

如果添加内容类型会怎样?

service.registerAccount = function(account) {
        console.log(account);  //account = { userName: 'test', password: 'hello' }
        return $http({
            method: 'POST',
            url: '/register',
            data: { account: account },
            headers: {
               'Content-Type': 'application/json'
            }
        });
    }

答案 2 :(得分:0)

UI代码没有任何问题。不确定router是什么,所以你可以尝试这个或发布路由器的代码。

试试这个(这对我有用)或者你也可以使用你的路由器:

app.post('/register', function (req, res) {
  console.log(req.body);
  res.send('welcome, ' + req.body.account.username)

});

你错过了:

var app = express();
app.use(router);

如果您想要用户路由器,请参考以下示例:

更新完整代码:

var express = require('express');
var router = express.Router();    
var app = express();
app.use(router);
router.post('/register', function(req, res) {
  console.log(req.body);
};
app.route('/register')
  .post(function (req, res) {
    console.log(req.body);
    res.send('welcome, ' + req.body.account.username)
  })

答案 3 :(得分:0)

试试这个

var express = require('express');
var app = express();
var bodyParser = require('body-parser');

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

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

var server = app.listen(8081, function () {

   var host = server.address().address
   var port = server.address().port

   console.log("Example app listening at http://%s:%s", host, port)
});

然后从提示符执行此操作:

$ curl localhost:8081/register -v --data "{\"name\":\"test\",\"password\":\"hello\"}" --header "Content-Type: application/json"

这适合我!