我使用node-soap模块在nodejs中创建了一个soap服务器。但是我收到一个错误,表明传入的soap xml中存在一些问题(如下所示)。
<肥皂日志:{故障:< {faultcode:500,< faultstring: '无效的XML',< detail:'错误:首先是非空格 标签。\ nLine:1 \ nColumn:1 \ nChar: - ',< statusCode:undefined}}
当我在谷歌搜索时,它表明这是Windows操作系统插入到unicode缓冲区的BOM(字节顺序标记)的问题。大多数解决方案建议在调用xml解析器之前替换/删除此BOM。
现在,当我使用node-soap模块时,我无法确定应用此修复程序的位置,下面是我的服务器代码。
/**
* Simple demonstration of soap service
**/
var soapService = require("./rv.js");
var xml = require('fs').readFileSync('./mmsxmlpushservicews.wsdl.xml', 'utf8');
var express = require('express');
var bodyParser = require('body-parser');
var soap = require('soap');
var app = express();
app.use(bodyParser.raw({type: function() { return true; }, limit: '5mb' }));
app.listen(8001, function(err) {
if (err) {
console.error("error:", err);
process.exit(1);
}
var server = soap.listen(app, '/smshttp/soapws', soapService, xml);
server.log = function(type, data) {
//console.log("soap log:", data);
}
console.log("service running on port 8001...");
});
答案 0 :(得分:0)
在此行之后将此行添加到您的代码中#app.use(bodyParser.raw({type:function(){return true;},limit:' 5mb'}));& #39;
app.use(function(req, res, next) {
var body = req.body.toString();
var body = body.replace('\ufeff', '');
req.body = Buffer.from(body);
next();
});
此快速挂钩允许您处理每个请求,评估已调用的网址,并使用' next()'安全地转发到下一位听众。
但是考虑到每个请求都会调用此函数,所以不要忘记只过滤那些需要清理字符串的函数。