我有一个Nodejs Express服务器和一个向服务器发送数据的angularJs客户端。
问题是,当我尝试使用angularJS将JSON发送到服务器时,收到的JSON变成这样:
{"{\"question\":\"What will be result of code int a ":" 5/2\",\"answers\":[{\"a\":\"2.50\",\"b\":\"1\",\"c\":\"2\",\"d\":\"no right answer\"}],\"answer\":\"c\",\"score\":\"100\"}"}
这是我在angularJS中的发布方法:
createQuestion: function(question){
delete question["_id"];
console.log(JSON.stringify(question))
return $http.post('http://localhost:3000/questions/', question, {
headers: { 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'}
})
.then(
function(response){
return response.data;
},
function(errResponse){
console.error('Error while creating question');
return $q.reject(errResponse);
}
);
}
console.log(JSON.stringify(question))
的输出是:
{"question":"What will be result of code int a = 5/2","answers":[{"a":"2.50","b":"1","c":"2","d":"no right answer"}],"answer":"c","score":"100"}
这是nodejs中负责POST方法的代码的一部分:
exports.create_a_question = function(req, res) {
console.log(JSON.stringify(req.body))
var new_question = new Question(req.body);
new_question.save(function(err, question) {
if (err)
res.send(err);
res.json(question);
});
};
搜索后,我发现此问题的发生是由于请求标头中的application/x-www-form-urlencoded
,但我将此配置添加到了nodejs服务器,但问题仍然存在:
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
这是nodejs服务器上的CORS标头:
res.setHeader('Access-Control-Allow-Origin', '*');
res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE');
res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With,content-type');
res.setHeader('Access-Control-Max-Ag', '3600');
我该如何解决问题?
答案 0 :(得分:0)
两次调用"\"
时出现反斜杠(JSON.stringify
)
var x = {a:1, b:2};
var y1 = JSON.stringify(x);
var y2 = JSON.stringify(y1);
console.log(y2);
AngularJS框架使用JSON.stringify
方法自动执行$http.post
。第二个JSON.stringify
在Node.js代码中被调用。
解决方案是在Node.js代码中使用JSON.parse
:
var x = {a:1, b:2};
var y1 = JSON.stringify(x);
var y2 = JSON.parse(y1);
console.log(y2);
答案 1 :(得分:0)
所以这是我解决问题的方法:
通过npm下载cors
库:
npm install --save cors
在代码中使用它:
var cors = require('cors');
app.use(cors());
然后我在调用angularjs $http.post
答案 2 :(得分:-1)
可能:
headers: { 'Content-Type': 'multipart/form-data', 'Cache-Control': 'no-cache', 'Pragma': 'no-cache'}
由于此处存在多种内容类型,因此...