在 node.js 中创建 http echo 服务器
Creating http echo server in node.js
我需要做的是简单的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}`);
});
好吧,
您正在尝试将请求传送到没有意义且不起作用的响应。我建议您使用 connect
或 express
模块。然后你可以这样做; response.status(200).send("Very Awesome").end()
.
相关文章:
- Meteor如何接收HTTP请求
- 在我的情况下,如何进行http请求
- //而不是在src=“”上使用http://"属性
- 我无法使用angularJs($http)访问服务器
- AJAX简单错误.XMLHttpRequest无法加载http://localhost/mpl/getPage.php.
- 如何将PHP get查询转换为Meteor's HTTP.get()
- 角度异步http自动完成
- 什么's本地node.js服务器和python简单http服务器之间的区别
- 角度http服务器页面刷新404s
- http.listen()在运行时接受终端命令
- IIS动态HTTP响应标头
- spring和angularJS(我得到了类似HTTP状态404的错误)
- 存储$http如何从$http函数(Angularjs)外部获取可访问变量中的响应
- Typescript angularjs$http获取响应类型(避免使用<any>)
- 如何从HTTP上下文对象中获取Post数据
- 使用插件收听Firefox标签的http请求
- "访问控制允许起源”;通过javascript从http页面调用同一网站的httpsurl时出现问题
- Meteor HTTP调用出现问题
- 在 node.js 中创建 http echo 服务器
- AngularJS http php echo