Nodejs express 获取客户端dojo.put 的数据问题?
Nodejs express 获取客户端dojo.put 的数据问题?
问题比较小白,各位海涵。
客户端dojo
服务端 node.js+express
需求这样。客户端调用
xhr.put({ url: “workspace/project1/doc/123.html”, putData: “ssssssssssssssss”, handleAs: “text”, contentType: “text/html” });
期望在服务端对应目录生成123.HTML这个文件,数据为putData里面的。
服务端怎么搞?目前服务端代码如下。
app.put(’.’,function(req, res){ console.log(req.params); console.log(req.putData);
//收到数据调用 fs模块刷磁盘。 不知道怎么写了?
}); 请指教????
当然可以!根据你的描述,你需要使用 Node.js 和 Express 来处理来自客户端的 dojo.put
请求,并将请求中的数据保存到服务器上的一个文件中。
客户端代码
你已经提供了客户端的代码,这里再确认一下:
xhr.put({
url: "workspace/project1/doc/123.html",
putData: "ssssssssssssssss",
handleAs: "text",
contentType: "text/html"
});
服务端代码
在服务端,你需要使用 Express 框架来处理 PUT 请求,并将请求体中的数据保存到文件中。你可以使用 Node.js 的内置 fs
模块来实现这一点。
以下是完整的示例代码:
const express = require('express');
const fs = require('fs');
const path = require('path');
const app = express();
const PORT = 3000;
// 使用中间件解析 JSON 和 URL 编码的请求体
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
// 处理 PUT 请求
app.put('/workspace/project1/doc/:id', (req, res) => {
const { id } = req.params; // 获取路径参数中的 ID
const data = req.body; // 获取请求体中的数据
// 定义文件路径
const filePath = path.join(__dirname, 'workspace', 'project1', 'doc', `${id}.html`);
// 将数据写入文件
fs.writeFile(filePath, data, (err) => {
if (err) {
console.error(err);
return res.status(500).send('Error saving file.');
}
console.log(`File saved at ${filePath}`);
res.send('File saved successfully.');
});
});
// 启动服务器
app.listen(PORT, () => {
console.log(`Server is running on http://localhost:${PORT}`);
});
解释
- 中间件:我们使用了
express.json()
和express.urlencoded()
中间件来解析请求体。 - 路由处理:定义了一个处理 PUT 请求的路由
/workspace/project1/doc/:id
,其中:id
是路径参数,用于指定文件名。 - 获取数据:从
req.body
中获取请求体中的数据。 - 文件操作:使用
fs.writeFile
方法将数据写入指定的文件路径。如果文件不存在,会自动创建文件;如果文件已存在,则会被覆盖。 - 响应:成功写入文件后返回成功的响应信息,否则返回错误信息。
希望这能解决你的问题!如果有任何疑问,请随时提问。
截取了下报文,数据有但是不知道拿? PUT http://127.0.0.1:3000/workspace/project1/doc/123.html HTTP/1.1 Host: 127.0.0.1:3000 User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:20.0) Gecko/20100101 Firefox/20.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8 Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3 Accept-Encoding: gzip, deflate Content-Type: text/html; charset=UTF-8 X-Requested-With: XMLHttpRequest Referer: http://127.0.0.1:3000/ Content-Length: 16 Connection: keep-alive
ssssssssssssssss
这两句输出是什么?
console.log(req.params);
console.log(req.putData);
最终我有调试了下代码? 发现客户端其实就这样 xhr.open(“put”,“123.html”,true); xhr.send(“aaaaaaaaa”);
服务端 怎么获取 xhr.send 参数数据啊?
包里面也有 如下 PUT http://127.0.0.1:3000/workspace/project1/doc/123.html HTTP/1.1 Host: 127.0.0.1:3000 User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:20.0) Gecko/20100101 Firefox/20.0 Accept: textml,application/xhtml+xml,application/xml;q=0.9,/;q=0.8 Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3 Accept-Encoding: gzip, deflate Content-Type: textml; charset=UTF-8 X-Requested-With: XMLHttpRequest Referer: http://127.0.0.1:3000/ Content-Length: 18 Connection: keep-alive
bbbbbbbbbbbbbbbbbb
摸索出来了。补充一下在。
如果是带参数方式如 123.html?id=aa&name=xxx 这种常规拿即可。如果直接put数据 即
xhr.open(“put”,“123.html”,ture);
xhr.send(“aaaaaa”);//
要获取send参数的话。服务端修改如下即可。
app.put(’.’,function(req, res){ var putData = “”; req.on(“data”, function(postDataChunk) { putData += postDataChunk; }); req.on(“end”, function() { console.log(“all data is '” + putData + “’.”); //返回标示 res.end(“ok”); }); });
要在Node.js中使用Express框架处理来自客户端dojo.put
请求的数据,并将数据写入文件,你需要通过req.body
或req.text
获取请求体中的数据,然后使用Node.js的fs
模块将这些数据写入文件。
示例代码
客户端代码(假设已经正确配置了dojo)
require(["dojo/_base/xhr"], function(xhr) {
xhr.put({
url: "workspace/project1/doc/123.html",
putData: "ssssssssssssssss",
handleAs: "text",
contentType: "text/html"
}).then(function(response) {
console.log("文件已成功创建:", response);
}, function(error) {
console.error("创建文件失败:", error);
});
});
服务端代码(Node.js + Express)
首先确保安装了express
和body-parser
(用于解析请求体):
npm install express body-parser
然后编写以下代码:
const express = require('express');
const bodyParser = require('body-parser');
const fs = require('fs');
const app = express();
// 使用body-parser中间件来解析请求体
app.use(bodyParser.text({ type: 'text/html' }));
app.put('/workspace/project1/doc/:filename', function(req, res) {
const filename = req.params.filename;
const content = req.body;
// 将请求体中的内容写入文件
fs.writeFile(`./${filename}`, content, (err) => {
if (err) {
console.error(err);
return res.status(500).send('服务器错误');
}
console.log(`${filename} 文件创建成功`);
res.send('文件创建成功');
});
});
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
console.log(`Server is running on port ${PORT}`);
});
解释
- 客户端:使用
dojo.put
发送一个PUT请求到指定URL。 - 服务端:
- 使用
express
和body-parser
中间件来解析请求体。 app.put('/workspace/project1/doc/:filename')
定义了一个路由处理函数,接收带有:filename
参数的PUT请求。req.body
获取请求体中的内容(即putData
)。- 使用
fs.writeFile
方法将数据写入指定文件。
- 使用
以上代码可以实现你的需求,将客户端发送的数据保存到服务器指定的文件中。