Nodejs 讨论一个问题:xml Raw和Form 的区别
Nodejs 讨论一个问题:xml Raw和Form 的区别
在讨论之前先分享个谷歌插件,知道得童鞋就绕过吧
chrome 插件 名称: Advanced Rest Client;
进入插件后 Payload
如图 raw form 得区别, server 端 怎么获取呢?
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中,raw
和 form
是两种不同的数据提交方式。raw
方式通常用于发送原始文本数据,例如JSON或XML格式的数据。而form
则是用于表单数据的提交,通常以键值对的形式出现。
示例代码
假设我们有一个简单的Node.js服务器,使用Express框架来处理HTTP请求,并演示如何从客户端接收raw
和form
形式的数据。
服务器端代码(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');
});
客户端测试
-
使用
raw
模式:向/raw
端点发送XML或JSON数据。{ "name": "John Doe", "age": 30 }
-
使用
form
模式:向/form
端点发送表单数据。name=John%20Doe&age=30
解释
-
raw
模式:在这种模式下,数据通常是直接以文本形式传递的,例如XML或JSON格式。在服务器端,你可以通过bodyParser.json()
来解析这种数据。 -
form
模式:在这种模式下,数据是以键值对的形式编码的,通常用于传统的HTML表单提交。服务器端可以使用bodyParser.urlencoded({ extended: true })
来解析这种数据。
以上示例展示了如何在Node.js中区分并处理这两种不同形式的数据。