繁体   English   中英

通过http post请求发送时在req.body中找不到我的json文件

[英]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]

我完全不知道这里发生了什么。

一些东西:

  1. 您不需要在数据对象上调用 JSON.stringify()。 只需将对象按原样传递给 $http 即可。
  2. 您需要传递 bodyParser.json() 而不是 bodyParser.urlencoded()。
  3. JSON.stringify() 应该在您尝试写入文件之前调用。

您的代码应如下所示:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM