【问题标题】:unable to receive form values in server using node js无法使用节点 js 在服务器中接收表单值
【发布时间】:2015-08-12 17:13:07
【问题描述】:

我正在使用如下所示的角度 $http 发布请求向服务器提交表单

$scope.fileUp = function(){
    var formda = new FormData();
    for(var key in $scope.formval)
    {   
        console.log(key, $scope.formval[key]);
        formda.append(key, $scope.formval[key])
    }
    $http.post("/upload",formda, {
        transformRequest : angular.indentity,
        header : {'Content-Type' : undefined }
    }).success(function(data){
        console.log(data)
    })
}

在我的节点服务器上,代码如下所示

var express = require("express");
var bodyParser = require("body-Parser");
var multer = require("multer");
var methodOverride = require('method-override');
var session = require('express-session');
var app = express();
app.use(express.static(__dirname + "/public")); 
app.use(methodOverride());
app.use(session({ resave: true, saveUninitialized: true, secret: 'uwotm8' }));
app.use(bodyParser.raw({limit: '150mb'}));
app.use(bodyParser.urlencoded({limit: '150mb', extended: true}));
app.use(multer({dest : __dirname + '/public/Epub/'}))
app.post("/upload",function(request,response){
    console.log(request.body)
    console.log(request.files)
    response.json({name : "a"});
})
app.listen(8080);
console.log("server running");

请求和响应效果很好。我收到 response.json({name : "a"});来自 post 方法的请求成功。

问题出在节点服务器console.log(request.body)上, console.log(request.files) 返回空 {} 。如何在 post 请求中接收表单数据。

我在这里做错了。我是节点 js 的新手...

【问题讨论】:

  • 但是你的“formda”不是空的吧?
  • 是的,它不为空
  • 所以最后没有一个答案是正确的?没有接受或赞成的答案。如果您同时找到了解决方案,那么您应该完全删除此帖子,因为它不会为 SO 添加任何价值。

标签: javascript angularjs node.js


【解决方案1】:

试试这个:

$scope.fileUp = function(){
    var formda = new FormData();
    for(var key in $scope.formval)
    {   
        console.log(key, $scope.formval[key]);
        formda.append(key, $scope.formval[key]);
    }
    $http.post({
                method: 'POST',
                url: '/upload',
                headers: {
                    'Content-Type':'application/json'
                },
                data: formda
            }).success(function(data){
        console.log(data);
    });
}

通过添加 app.use(bodyParser.json()) 来更改 nodejs 代码:

var express = require("express");
var bodyParser = require("body-Parser");
var multer = require("multer");
var methodOverride = require('method-override');
var session = require('express-session');
var app = express();
app.use(express.static(__dirname + "/public")); 
app.use(methodOverride());
app.use(session({ resave: true, saveUninitialized: true, secret: 'uwotm8' }));
app.use(bodyParser.raw({limit: '150mb'}));
app.use(bodyParser.urlencoded({limit: '150mb', extended: true}));
app.use(bodyParser.json());
app.use(multer({dest : __dirname + '/public/Epub/'}))
app.post("/upload",function(request,response){
    console.log(request.body);
    console.log(request.files);
    response.json({name : "a"});
})
app.listen(8080);
console.log("server running");

还要尽量避免语法错误,您的代码中缺少几个分号。

【讨论】:

    【解决方案2】:

    $http post 方法使用 then 函数而不是成功。并将数据串化后发送。

                $http({
                        url:'/upload',
                        method: 'POST',
         data: JSON.stringify({ userName: user})
                        }).then(function (res) {
                        $log.log(res.data);
                        $log.log(res.data.userFirstName);
                     });
    

    【讨论】:

      【解决方案3】:

      node.js 接收 JSON 格式的数据。在您发送的 angularjs 代码中,直接使用 formda 对象。您应该在 JSON 中发送此对象 wrapped。示例:

      var data = {"formdakey":formda}
      

      现在,您应该向 nodejs 发送数据对象,在 nodejs 中,您可以使用以下 sn-p 检索 formda 的值:

      var formdaval = req.body.formdakey;
      

      试试这个并报告,以防您仍然遇到问题。

      【讨论】:

        猜你喜欢
        • 2019-12-08
        • 1970-01-01
        • 1970-01-01
        • 2012-12-15
        • 1970-01-01
        • 2021-10-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多