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模块刷磁盘。 不知道怎么写了?

}); 请指教????


7 回复

当然可以!根据你的描述,你需要使用 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}`);
});

解释

  1. 中间件:我们使用了 express.json()express.urlencoded() 中间件来解析请求体。
  2. 路由处理:定义了一个处理 PUT 请求的路由 /workspace/project1/doc/:id,其中 :id 是路径参数,用于指定文件名。
  3. 获取数据:从 req.body 中获取请求体中的数据。
  4. 文件操作:使用 fs.writeFile 方法将数据写入指定的文件路径。如果文件不存在,会自动创建文件;如果文件已存在,则会被覆盖。
  5. 响应:成功写入文件后返回成功的响应信息,否则返回错误信息。

希望这能解决你的问题!如果有任何疑问,请随时提问。


截取了下报文,数据有但是不知道拿? 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.bodyreq.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)

首先确保安装了expressbody-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}`);
});

解释

  1. 客户端:使用dojo.put发送一个PUT请求到指定URL。
  2. 服务端
    • 使用expressbody-parser中间件来解析请求体。
    • app.put('/workspace/project1/doc/:filename') 定义了一个路由处理函数,接收带有:filename参数的PUT请求。
    • req.body 获取请求体中的内容(即putData)。
    • 使用fs.writeFile方法将数据写入指定文件。

以上代码可以实现你的需求,将客户端发送的数据保存到服务器指定的文件中。

回到顶部