无法从Express.js 4.13.x中的req.body读取帖子参数

时间:2015-09-26 14:40:07

标签: javascript node.js express ionic-framework

目标:我是Node.js和Express.js框架的新手。目前我正在使用IONIC框架编写一个小应用程序,我尝试将用户基本详细信息(如FirstName,LastName)传递给node.js服务器作为第一步。然后,一旦我读取了数据,我就打算将数据保存在数据库中。

问题目前,当我通过从我的应用程序到节点js服务器的POST请求传递详细信息(在本例中只是FirstName用于测试目的),当我尝试使用{{访问FirstName时1}},服务器返回req.body.FirstName。但是当我使用"undefined"时,它会返回console.log(req.body)的值

我不确定我在哪里错过了。我想我通过Google引用了很多链接,似乎没有任何结果。这可能是一件简单的事情,但它让我很烦恼,而且我浪费时间去寻找解决方案。

配置: Express.js - 4.13.3

我根据此问题的相关链接尝试了不同的组合。似乎没有什么工作。任何指导或建议都会对我有所帮助。

serverapp.js

eg., { '{"FirstName":"test"}': '' }.

Controllers.js的代码片段 - 发送请求通过此发送。

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

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

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

app.use(function(req, res, next) {
  res.header("Access-Control-Allow-Origin", "*");
  res.header('Access-Control-Allow-Methods', 'GET,POST');
  res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
  next();
});


app.post('/', function(req, res) {

  console.log("Hi from server", req.body);
  console.log("Hi this is key value", req.body.FirstName); // this throws error as undefined

});

  var server = app.listen(8100, function () {
  var host = server.address().address;
  var port = server.address().port;

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

Rego.html文件

var url = 'http://localhost:8100'
       var request = $http.post(url,
                {'FirstName': $scope.Model.FName}, {headers: { 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'}});

2 个答案:

答案 0 :(得分:1)

此对象{ '{"FirstName":"test"}': '' }只有一个键{"FirstName":"test"}且值为空字符串。实际上整个对象是第一个值的关键。

对象必须如下:{"FirstName":"test"}

但我不知道事情是如何结束的。你的表单中有FName,但是你得到了这个,我不知道这个IONIC框架是什么以及它是如何工作的。我认为最好先尝试使用express.js然后切换到更高级别的框架。

答案 1 :(得分:0)

我已经解决了这个问题。解决方案是在向服务器发送URL编码数据的请求时使用transformRequest,因为默认情况下发送给服务器的请求发送Json对象。当你想要超越它时,你必须使用transformRequest

$http({
                method: 'POST',
                url: url,
                headers: {'Content-Type': 'application/x-www-form-urlencoded'},
                transformRequest: function(obj) {
                var str = [];
                for(var p in obj)
                str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p]));
                return str.join("&");
                },

                data: {
                FirstName: $scope.Model.FName}