0

我使用node-soap模块在 nodejs 中创建了一个肥皂服务器。但是我收到一个错误,表明传入的soap xml(如下所列)中存在一些问题。

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

当我在谷歌中搜索时,它表明这是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...");
});
  • 在上面的soap服务器代码中,在soap服务器执行解析之前,是否有一个事件/回调钩子可以用来修改soap请求缓冲区?
  • 如果是,我应该在哪里以及如何做?
4

1 回答 1

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 中的这个钩子允许您处理每个请求,评估哪些 url 已被调用,并使用 'next()' 安全地转发到下一个侦听器。

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

于 2017-06-16T14:06:16.130 回答