在 node.js 中创建 http echo 服务器

Creating http echo server in node.js

本文关键字:http echo 服务器 创建 node js      更新时间:2023-09-26

我需要做的是简单的node.js http echo服务器。但是,我在节点网站和其他一些地方找到的服务器要么无法按照我想要的方式工作,要么我不了解它们是如何工作的。

使用了这个简单的回显服务器,在我的客户端(用 java 编写)我没有得到我想要的结果。

var http = require('http');
http.createServer(function(request,response){
 response.writeHead(200);
 request.pipe(response);
}).listen(8080);

我希望我的服务器做出由响应标头和响应正文组成的响应,其中我将拥有我的客户端发送和返回的整个 http 请求。客户端正在测量从发送请求到返回整个响应的时间。客户端还将响应正文写入文件。

当我尝试使用类似的东西时

 response.write(request.url);

我在响应正文中获取 request.url 并且可以工作,但我希望将整个 http 请求包含在其中。

任何帮助将不胜感激。

使用:

response.write(JSON.stringify(request.headers))

完成后添加response.end()

http.createServer(function(request,response){
  response.writeHead(200)
  request.pipe(response)
  response.end()
}).listen(8080)

下面是一个示例回显服务器,除了回显正文外,它还记录请求方法、URL、标头和正文,并提供必要的 CORS 配置以正确处理预检 OPTION 请求。

服务器

const http = require("http");
const port = 8080;
http
  .createServer((req, res) => {
    const headers = {
      "Access-Control-Allow-Origin": "*",
      "Access-Control-Allow-Methods": "OPTIONS, POST, GET, PUT",
      "Access-Control-Max-Age": 2592000, // 30 days
      "Access-Control-Allow-Headers": "*",
      /** add other headers as per requirement */
    };
    if (req.method === "OPTIONS") {
      res.writeHead(204, headers);
      res.end();
      return;
    }
    if (["GET", "POST", "PUT"].indexOf(req.method) > -1) {
      res.writeHead(200, headers);
      let body = [];
      req.on('data', (chunk) => {
        body.push(chunk);
      }).on('end', () => {
        body = Buffer.concat(body).toString();
        console.log(`==== ${req.method} ${req.url}`);
    console.log('> Headers');
        console.log(req.headers);
    console.log('> Body');
    console.log(body);
        res.write(body);
        res.end();
      });
      // res.end("Hello World");
      return;
    }
    res.writeHead(405, headers);
    res.end(`${req.method} is not allowed for the request.`);
  })
  .listen(port);
console.log("listening on port " + port);

示例用法

curl -X PUT -d '{"message": "hello"}' localhost:8080

http 是 tcp,所以做一个 TCP 服务器并回显

const net = require('node:net');
const server = net.createServer((socket) => {
    console.clear(); // I like this
    socket.on(`data`, d => {
        socket.write(d);
        console.log(String(d));
    });
    setTimeout(() => {
        socket.end();
    }, 100);
}).on('error', (err) => {
    throw err;
});
server.listen(8080, () => {
    console.log(`opened server on ${server.address().port}`);
}); 
好吧,

您正在尝试将请求传送到没有意义且不起作用的响应。我建议您使用 connectexpress 模块。然后你可以这样做; response.status(200).send("Very Awesome").end() .