Nodejs 讨论一个问题:xml Raw和Form 的区别

Nodejs 讨论一个问题:xml Raw和Form 的区别

在讨论之前先分享个谷歌插件,知道得童鞋就绕过吧

chrome 插件 名称: Advanced Rest Client;

Advanced Rest Client

进入插件后 Payload

raw  form 得区别

如图 raw form 得区别, server 端 怎么获取呢?


4 回复

Node.js 讨论一个问题:XML Raw 和 Form 的区别

在讨论这个问题之前,先介绍一个非常有用的工具——Advanced Rest Client。这是一个Chrome插件,可以用来测试API。如果你已经知道并使用过它,可以跳过这一部分。

使用 Advanced Rest Client 进行测试

首先,你需要安装并打开 Advanced Rest Client 插件。然后你可以设置请求类型(如POST或GET),输入URL,并选择请求体的格式(Raw 或 Form)。

Raw 与 Form 的区别

在插件中,当你选择不同的Payload类型时,你会看到不同的输入区域:

  • Raw: 在这里,你可以直接输入纯文本、JSON或XML数据。
  • Form: 在这里,你可以输入键值对形式的数据。

示例代码

假设你正在开发一个Node.js应用,并且需要处理来自客户端的XML数据。以下是两个示例代码片段,分别展示了如何处理Raw和Form两种不同类型的XML数据。

处理 Raw XML 数据
const express = require('express');
const app = express();

app.use(express.json()); // 解析JSON格式的请求体
app.use(express.text({ type: 'application/xml' })); // 解析XML格式的请求体

app.post('/api/raw', (req, res) => {
    const xmlData = req.body;
    console.log(xmlData); // 输出接收到的XML数据
    res.send('Received raw XML data.');
});

app.listen(3000, () => {
    console.log('Server is running on port 3000');
});
处理 Form XML 数据
const express = require('express');
const app = express();
const bodyParser = require('body-parser');

app.use(bodyParser.urlencoded({ extended: true }));

app.post('/api/form', (req, res) => {
    const xmlData = req.body.xml; // 假设客户端发送的XML数据被放在名为`xml`的字段中
    console.log(xmlData); // 输出接收到的XML数据
    res.send('Received XML data in form format.');
});

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

结论

通过上述示例代码,我们可以看到处理Raw和Form两种不同类型的XML数据的关键在于如何配置中间件来解析请求体。当客户端以Raw方式发送XML数据时,我们需要确保服务器能够正确解析这种格式的数据。而当数据以Form形式发送时,我们需要从请求体中提取特定的字段来获取XML数据。

希望这些示例代码能帮助你更好地理解Raw和Form两种方式的区别,并在实际开发中加以应用。


我就是再用这个插件,这个插件太方便了,这里我先说下为什么会使用到这个插件, 首先我们做项目的时候,在前端ui(这里是指整个前端包括css,图片等)没有出来之前我们会先实现后端的api和modules,我们项目是使用RESTful的方式,所有的数据以json的形式交互,所以在ui没有实现之前为了测试api就是使用这个插件, form主要是模拟页面上的form, raw是模拟json的形式发送到后台, 比如:选择raw之后在输入框中输入:

{
    "username": "test@live.cn",
    "password": "xxxxxxxx",
    "acceptNewsletter": true
}

然后下面的选择框选择application/json这样就可以发送以json格式的数据到服务端。 当然如果你也是这种模式开发,再配合这个网站就更方便了,现在验证json数据的:http://jsonlint.org/

这里补充下在服务端获取的方式是不变的,post方式就用req.body直接获取就行了。 不了解可以去看下http的请求方式就行了 。

在Node.js中,rawform 是两种不同的数据提交方式。raw 方式通常用于发送原始文本数据,例如JSON或XML格式的数据。而form 则是用于表单数据的提交,通常以键值对的形式出现。

示例代码

假设我们有一个简单的Node.js服务器,使用Express框架来处理HTTP请求,并演示如何从客户端接收rawform形式的数据。

服务器端代码(app.js)

const express = require('express');
const bodyParser = require('body-parser');

const app = express();

// 用于解析application/json格式的数据
app.use(bodyParser.json());

// 用于解析application/x-www-form-urlencoded格式的数据
app.use(bodyParser.urlencoded({ extended: true }));

app.post('/raw', (req, res) => {
    const rawData = req.body;
    console.log("Raw data received:", rawData);
    res.send("Raw data received successfully");
});

app.post('/form', (req, res) => {
    const formData = req.body;
    console.log("Form data received:", formData);
    res.send("Form data received successfully");
});

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

客户端测试

  1. 使用raw模式:向/raw端点发送XML或JSON数据。

    {
        "name": "John Doe",
        "age": 30
    }
    
  2. 使用form模式:向/form端点发送表单数据。

    name=John%20Doe&age=30
    

解释

  • raw 模式:在这种模式下,数据通常是直接以文本形式传递的,例如XML或JSON格式。在服务器端,你可以通过bodyParser.json()来解析这种数据。

  • form 模式:在这种模式下,数据是以键值对的形式编码的,通常用于传统的HTML表单提交。服务器端可以使用bodyParser.urlencoded({ extended: true })来解析这种数据。

以上示例展示了如何在Node.js中区分并处理这两种不同形式的数据。

回到顶部