目标:我是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'}});
答案 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}