[英]can't find my json file in req.body when sending it through http post request
我几乎已经在我的应用程序上添加了一个新功能,试图通过 express 将一个 json 文件从 angular 前端传递到节点后端。 原始代码来自如何通过节点服务器将 JSON 对象写入文件? . 我的控制器部分代码如下所示:
var app = angular.module('myApp',[]);
app.controller('myCtrl',function ($scope, $http){
$scope.saveImage = function(){
var data = JSON.stringify(canvas);
debugger;
$http({
url: 'http://localhost:8080',
method: "POST",
data: data,
header: 'Content-Type: application/json'
});
}
});
我可以从开发人员工具中看到,json 字符串“数据”确实已创建,并且在我的控制器前端中有很多东西。 但是当我将它传递给节点端时,我无法从 req.body 获得任何东西。 这是我的后端代码:
// set up
var express = require('express');
var app = express();
var fs = require('fs');
var bodyParser = require("body-parser");
app.use(bodyParser.urlencoded({extended: false}));
var saveCount = 1;
//functions
// application -------------------------------------------------------------
app.use(express.static('./public'));
app.get('/', function (req, res) {
res.send('Hello World!');
});
app.post('/', function (req, res) {
fs.writeFile(__dirname+"/save/post"+saveCount.toString()+".json", req.body, function(err) {
if(err) {
return console.log(err);
}
res.send('The file was saved!');
});
saveCount++;
});
//listen
app.listen(8080, function () {
console.log('Example app listening on port 8080!');
});
每次当我检查我的 psot.json 文件时,它只有 [object Object]
我完全不知道这里发生了什么。
一些东西:
您的代码应如下所示:
var app = angular.module('myApp',[]);
app.controller('myCtrl',function ($scope, $http){
$scope.saveImage = function(){
debugger; // What does this do?
$http({
url: 'http://localhost:8080',
method: "POST",
data: canvas,
header: 'Content-Type: application/json'
});
}
});
和
// set up
var express = require('express');
var app = express();
var fs = require('fs');
var bodyParser = require("body-parser");
app.use(bodyParser.json());
var saveCount = 1;
//functions
// application -------------------------------------------------------------
app.use(express.static('./public'));
app.get('/', function (req, res) {
res.send('Hello World!');
});
app.post('/', function (req, res) {
fs.writeFile(__dirname+"/save/post"+saveCount.toString()+".json", JSON.stringify(req.body), function(err) {
if(err) {
return console.log(err);
}
res.send('The file was saved!');
});
saveCount++;
});
//listen
app.listen(8080, function () {
console.log('Example app listening on port 8080!');
});
[object Object]
意味着您的对象实际上正在将其发送到服务器并被正确解析,这只是该对象的表示。 但是,您确实不需要在前端进行字符串化。 $http 将为您处理发送对象,您只是为您的应用程序创建额外的工作。 虽然 bodyParser 可能会获取 post 数据(可能是因为您在前端处理它的方式),但您真正想要的是 bodyParser 使用 .json() 方法将其解析为 JSON 对象,因为那是这是什么。
如果您不想经历所有这些,您可以保留现在拥有的内容,并将您的 Content-Type 更改为 application/text 或类似内容,以便在到达服务器时不会将其解析为对象。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.