如何将$ scope变量数据传递给node.js后端服务器文件?

时间:2017-08-29 07:05:32

标签: angularjs node.js

我在$ scope变量中有json数据,我想在我的后端app.js节点文件中使用那个$ scope变量。

这是我的后端文件app.js:

app.post('/upload', upload.single('file'), function(req, res) {

    var XLSX = require('xlsx');
    var workbook = XLSX.readFile('./uploads/' + req.file.filename);
    var sheet_name_list = workbook.SheetNames;
    var data = XLSX.utils.sheet_to_json(workbook.Sheets[sheet_name_list[0]]);
    //var values = [];
    console.log(data);
    return res.status(200).send(data);
});

app.post('/api/uploadlast',api.addNewContact, function(req,res){

    Contact.bulkCreate(excels).then(function(users) {
        return res.status(200).send(users);
    }).catch(Sequelize.ValidationError, function(err) {
        return res.status(422).send(err.errors[0].message);
    }).catch(function(err) {
        return res.status(400).send(err.message);
    });
})

这是我的控制器文件:

   $scope.uploadFile = function() {
            var file = $scope.myFile;
            var uploadUrl = "/upload";
            var fd = new FormData();
            fd.append('file', file);

            $http.post(uploadUrl, fd, {
                    transformRequest: angular.identity,
                    headers: {
                        'Content-Type': undefined
                    }
                })
                .then(function(response) {
                    //$state.reload();
                    $scope.excels = response.data;
                    console.log("success!!");
                })
                .catch(function() {
                    console.log("error!!");
                });

        }

        $scope.uploadLast = function() {
            $http.post('/api/uploadlast').then(function(response) {
                $state.reload();
           });
        }
     })

我想将$ scope.excels数据放入我的后端以批量创建数据库。

1 个答案:

答案 0 :(得分:1)

您可以将带有帖子请求的任何数据作为$http.post()的第二个参数传递。所以你可以这样做:

$scope.uploadLast = function() {
    var data = {
        excels: $scope.excels
    };

    $http.post('/api/uploadlast', data).then(function(response) {
        $state.reload();
    });
}

在你的后端,你可以像访问它一样访问它:

app.post('/api/uploadlast',api.addNewContact, function(req, res){

    var data = req.body.excels;


    Contact.bulkCreate(data).then(function(users) {
        return res.status(200).send(users);
    }).catch(Sequelize.ValidationError, function(err) {
        return res.status(422).send(err.errors[0].message);
    }).catch(function(err) {
        return res.status(400).send(err.message);
    });
});