我几乎在我的应用程序上添加了一个新功能,试图通过express将json文件从angular frontend传递到node后端。原始代码来自How do I write a JSON object to file via Node server?。我的控制器部件代码如下:
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字符串“data”确实已经创建,并且在我的控制器前端中有很多东西。但是当我将它传递给节点端时,我无法从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]
我完全不知道这里发生了什么。
答案 0 :(得分:1)
一些事情:
您的代码应如下所示:
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可能正在拾取帖子数据(可能是因为你在前端处理它的方式),但你真正想要的是bodyParser使用.json()方法将其解析为JSON对象,因为那是它是什么。
如果您不想完成所有这些操作,可以保留现在的内容并将内容类型更改为应用程序/文本或类似内容,以便在它到达时不会将其解析为对象服务器