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

c8ib6hqw  于 2023-05-16  发布在  Java
关注(0)|答案(5)|浏览(119)

我需要做的是简单的node.js http echo服务器。然而,我在node网站和其他一些地方找到的服务器要么不像我想的那样工作,要么我不明白它们是如何工作的。
我使用这个简单的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请求。
任何帮助将不胜感激。

a8jjtwal

a8jjtwal1#

用途:

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

mfuanj7w2#

完成后添加response.end()

http.createServer(function(request,response){

  response.writeHead(200)
  request.pipe(response)
  response.end()

}).listen(8080)
kkbh8khc

kkbh8khc3#

这里是一个示例echo服务器,除了回显主体之外,它还记录请求方法、url、header和主体,并提供必要的CORS配置来正确处理preflight 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
bq3bfh9z

bq3bfh9z4#

HTTP是TCP,因此创建一个TCP服务器并进行echo

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}`);
});
bkkx9g8r

bkkx9g8r5#

好吧,你试图通过管道将请求传递给响应,这没有意义,也不起作用。我建议您使用connectexpress模块。那么你可以这样做; response.status(200).send("Very Awesome").end()

相关问题