如何在Node.js上更改接收POST数据的大小限制

ERG*_*ERG 0 post node.js angularjs

我的Angularjs应用将XML字符串作为POST数据发送到Node.js服务器。

var xmlString = (new XMLSerializer()).serializeToString(xmlData);
var fd = new FormData();
fd.append('xml', xmlString);
$http.post("/saveXML", fd, {
    transformRequest: angular.identity,
    headers: {'Content-Type': undefined}
}).success(function (response) {
    console.log('xml uploaded!!', response);
}).error(function (error) {
    console.log("Error while uploading the xml!");
});
Run Code Online (Sandbox Code Playgroud)

然后Node.js接收数据并将其写入文件。

app.post('/saveXML', function (request, response) {
    var xmlData = request.body.xml;
    console.log(request.body);
    fs.writeFile("./uploads/mergedXml.xml", xmlData, function(wError){
        if (wError) {
            console.log(wError.message);
            response.send({
                success: false,
                message: "Error! File not saved!"

            });
            throw wError;
        }
        console.log("success");
        response.send({
            success: true,
            message: "File successfully saved!"
        });
    });
});
Run Code Online (Sandbox Code Playgroud)

问题是,如果发送的XML字符串(POST xml数据)大于1MB,则Node.js(?)将其截断为1MB。因此,“ mergedXml.xml”为1MB或确切为1024 Kb

我用于Node.js:“ express”,“ fs”,“ multer”,“ body-parser”。

我已经尝试了各种设置,例如:

app.use(multer({
    dest: './uploads/',
    limits: {
        fileSize: 999999999
    }
}));

app.use(bodyParser.raw({limit:  '10mb'}));
Run Code Online (Sandbox Code Playgroud)

但是他们没有工作。这有什么问题吗?这是angularjs POST方法的问题吗?感谢您的帮助。

Rav*_*avi 5

您可以使用require('body-parser-xml')模块并进行一些配置。

请对以下代码段进行罚款:

var express = require('express'); 
var bodyParser = require('body-parser');
require('body-parser-xml')(bodyParser);

var app = express();

app.use(bodyParser.json());
app.use(bodyParser.xml({
    limit: '10MB', // Reject payload bigger than 10 MB 
    xmlParseOptions: {
        normalize: true, // Trim whitespace inside text nodes 
        normalizeTags: false, // Transform tags to lowercase 
        explicitArray: false // Only put nodes in array if >1 
    }
}));

app.post('/saveXML', function (request, response) {
    var xmlData = request.body.xml;
    response.send(request.body);
});

var server = app.listen(3000);
Run Code Online (Sandbox Code Playgroud)

我已经用1.9 mb的有效负载验证了它的工作正常,您可以在最后检查。