2017-06-14 141 views
0

我使用node-soap模块在nodejs中创建了soap服务器。但是我收到一个错误,表明在传入的soap xml中存在一些问题(下面列出)。node-soap - 如何在肥皂监听器处理soap请求之前捕获soap请求

< soap log: { Fault: < { faultcode: 500, < faultstring: 'Invalid XML', < detail: 'Error: Non-whitespace before first tag.\nLine: 1\nColumn: 1\nChar: -', < statusCode: undefined } }

当我在谷歌搜索周围,它表示,它是BOM(字节顺序标记)的问题,其Windows操作系统插入到unicode的缓冲器。大多数解决方案建议在调用xml解析器之前替换/删除此BOM。

enter image description here

现在,当我使用节点皂模块,我无法弄清楚在何处应用此修复程序,下面是我的服务器代码。

/** 
* 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

添加到您的代码之后此行'app.use(bodyParser.raw({type:function(){return true;},limit:'5mb'}));'

app.use(function(req, res, next) { 
    var body = req.body.toString(); 
    var body = body.replace('\ufeff', ''); 
    req.body = Buffer.from(body); 
    next(); 
}); 

这个钩子在Express允许您处理每一个请求,评估哪些网址已被称为和安全着与“下一个()”下一个听众。

但是考虑到这个函数将被调用来处理每个请求,所以不要忘记只过滤那些你需要清理字符串的地方。