Nodejs 如何post xml 数据 以及 服务端 如何获取 xml 数据

Nodejs 如何post xml 数据 以及 服务端 如何获取 xml 数据

js\n var http = require(“http”); var xml2js = require(‘xml2js’); var json = { MsgType:“text”, Version:“1.0.0”, AppId:“rs00004001” }

    var b = new xml2js.Builder();
    var xml = b.buildObject(json);
    console.log(xml);
    var opurl = {
            host:'test.com',
            port:8089,
            path:"/trust",
            method:"POST",
            data:xml,
            headers:{
            "Connection":"Keep-Alive",
            "Content-Type":'application/xml;charset=utf-8',
            "Content-length":xml.length
          }

}

     http.get(opurl,function(res){
    //console.log('a');
    //res.send(xml)
    res.setEncoding('utf-8')
    res.on('data',function(d){
    console.log(d);
    })
  })\n

服务端怎么获取 到 xml 数据呢?

是这样得吗


7 回复

当然可以。以下是关于如何使用 Node.js 发送和接收 XML 数据的详细解答。

客户端发送 XML 数据

首先,我们来创建一个客户端脚本,该脚本将使用 http 模块发送一个包含 XML 数据的 POST 请求。

// 引入所需的模块
const http = require('http');
const xml2js = require('xml2js');

// 创建 JSON 对象
const json = {
    MsgType: "text",
    Version: "1.0.0",
    AppId: "rs00004001"
};

// 使用 xml2js 构建器将 JSON 转换为 XML 字符串
const builder = new xml2js.Builder();
const xml = builder.buildObject(json);

console.log(xml); // 打印生成的 XML 字符串

// 设置请求选项
const options = {
    hostname: 'test.com',
    port: 8089,
    path: '/trust',
    method: 'POST',
    headers: {
        'Content-Type': 'application/xml; charset=utf-8',
        'Content-Length': Buffer.byteLength(xml, 'utf-8'),
        'Connection': 'keep-alive'
    }
};

// 创建请求对象并发送数据
const req = http.request(options, (res) => {
    let data = '';

    // 接收响应数据
    res.on('data', (chunk) => {
        data += chunk;
    });

    // 当所有数据被接收后打印
    res.on('end', () => {
        console.log(data);
    });
});

// 在请求中写入 XML 数据
req.write(xml);

// 结束请求
req.end();

服务端接收 XML 数据

接下来,我们需要编写一个简单的服务端脚本来接收并解析这些 XML 数据。

// 引入所需的模块
const http = require('http');
const xml2js = require('xml2js');

// 创建 HTTP 服务器
const server = http.createServer((req, res) => {
    if (req.method === 'POST') {
        const parser = new xml2js.Parser();

        let body = '';
        
        // 接收数据
        req.on('data', (chunk) => {
            body += chunk;
        });

        // 数据接收完毕
        req.on('end', () => {
            parser.parseString(body, (err, result) => {
                if (err) {
                    console.error(err);
                    res.writeHead(500, { 'Content-Type': 'text/plain' });
                    res.end('Internal Server Error');
                    return;
                }

                // 解析结果
                console.log(result);
                res.writeHead(200, { 'Content-Type': 'text/plain' });
                res.end('XML received and parsed successfully!');
            });
        });
    } else {
        res.writeHead(405, { 'Content-Type': 'text/plain' });
        res.end('Method Not Allowed');
    }
});

// 监听端口
server.listen(8089, 'test.com', () => {
    console.log('Server is running on port 8089');
});

总结

上述代码展示了如何使用 Node.js 发送和接收 XML 数据。客户端使用 http.request 方法发送包含 XML 数据的 POST 请求。服务端则通过监听 POST 请求,并使用 xml2js 模块解析接收到的 XML 数据。希望这对你有所帮助!


你的res.on('data', onchunk)事件用得有问题,如果服务器是用chunked响应的,那么你console出来的只有第一个chunk的数据格式 :p

哥们儿,你还是把拿到的数据做个拼接把,每次data event事件出发之后,你输出然后数据就丢弃了。。。

这个知道 var data = "" event data data+=chunked; event end console.log(data);

现在就是这样 post xml 无法获取到

现在就是 data:xml 是这样对吗? 现在是怀疑这块

为了回答这个问题,我们将分为两个部分来处理:客户端如何发送 XML 数据以及服务端如何接收并解析 XML 数据。

客户端发送 XML 数据

首先,我们需要使用 http 模块来创建一个 POST 请求,并将 XML 数据作为请求体发送。以下是示例代码:

const http = require('http');
const xml2js = require('xml2js');

const json = {
    MsgType: "text",
    Version: "1.0.0",
    AppId: "rs00004001"
};

const builder = new xml2js.Builder();
const xml = builder.buildObject(json);

const options = {
    hostname: 'test.com',
    port: 8089,
    path: '/trust',
    method: 'POST',
    headers: {
        'Content-Type': 'application/xml; charset=utf-8',
        'Content-Length': Buffer.byteLength(xml)
    }
};

const req = http.request(options, (res) => {
    res.setEncoding('utf-8');
    res.on('data', (chunk) => {
        console.log(`Response: ${chunk}`);
    });
});

req.on('error', (e) => {
    console.error(`Problem with request: ${e.message}`);
});

req.write(xml);
req.end();

服务端接收并解析 XML 数据

服务端可以使用 http 模块监听一个端口,并在接收到数据时进行解析。以下是示例代码:

const http = require('http');
const xml2js = require('xml2js');

const server = http.createServer((req, res) => {
    let xmlData = '';

    req.on('data', (chunk) => {
        xmlData += chunk;
    });

    req.on('end', () => {
        const parser = new xml2js.Parser();
        parser.parseString(xmlData, (err, result) => {
            if (err) {
                res.writeHead(400, { 'Content-Type': 'text/plain' });
                res.end('Invalid XML');
            } else {
                res.writeHead(200, { 'Content-Type': 'text/plain' });
                res.end(JSON.stringify(result));
            }
        });
    });
});

server.listen(8089, () => {
    console.log('Server is running on port 8089');
});

解释

  • 客户端:使用 http.request 发送一个 POST 请求,并通过 req.write 将 XML 数据写入请求体。
  • 服务端:监听 /trust 路径上的 POST 请求,收集所有数据片段并将它们拼接成完整的 XML 字符串。然后使用 xml2js.Parser 解析 XML 数据为 JSON 对象,并返回给客户端。

确保在客户端和服务端都安装了 xml2js 包,可以通过 npm install xml2js 进行安装。

回到顶部