我有一个响应http流量的节点快速服务器:
argc < 3
一切正常。我想在我的节点服务器上安装一个程序,将模拟的http流量注入快速堆栈,而不需要网络连接。我不能只用const http = require("http");
const express = require("express");
const app = express();
const server = http.createServer(app);
app.use(function(req,res,next){
console.log(`logging: req: ${util.inspect(req)}`);
next();
});
对来调用中间件函数,就像上面(req,res)
中的函数一样,因为我没有app.use
来提供它,而我next
1}}和req
不会是res
传递给堆栈中下一个中间件的。
编辑:我实际拥有的是一个websocket连接,它发送不同格式的数据包,不同的数据内容来自http流量,也可以携带相同的信息。我可以使用那些websocket数据包并从那些与http流量使用的格式相同的请求构建。我想通过快速的http中间件堆栈传递转换后的请求,并以相同的方式处理它。一直回到创建一个刚刚处理了ws请求的http请求似乎有点远。
请问模拟某些流量的最简单方法是什么?我可以在next
上拨打电话吗?调用一些快速中间件,或者写一个我自己的中间件来注入流量?在app
上调用一个函数?
谢谢!
答案 0 :(得分:1)
通过调用一些Express.js内部函数来模拟流量不是正确的方法。更容易通过来自同一进程的HTTP请求来触发服务器
const http = require('http');
const util = require('util');
const express = require('express');
const app = express();
const server = http.createServer(app);
app.use(function(req, res, next) {
console.log(`logging: req: ${util.inspect(req)}`);
next();
});
const port = 8081;
server.listen(port);
http.request({ port }).end();
从你的问题
我想在我的节点服务器上安装一个程序,将模拟的http流量注入快速堆栈,无需网络连接
你能澄清一下,为什么没有网络连接?
答案 1 :(得分:0)
一些事情:
Express为您提供了一种接收请求的方法( req ,res)(可能来自浏览器,可能不是),执行某些操作并返回响应(req, res < / strong>)请求者。
表达式
app.use(function(req,res,next){
console.log(`logging: req: ${util.inspect(req)}`);
next();
});
实际上是一个中间件功能。这将收集服务器的每个请求,并将express创建的请求对象更改为字符串,并将其打印在服务器日志中。
如果您想要一个可测试的端点,您可以将其添加到您发布的代码段的底部
app.get('/test', function (req, res) {
res.json({success:true})
})
这会告诉您的应用在端点GET
/test
个请求
接下来,您需要在可以向其发送请求的地方托管您的快速服务器。您的本地计算机(localhost
)是一个很好的选择。这样,您就不需要互联网连接。
选择要托管服务器的端口,然后可以http://localhost:<Your Port>
访问该端口。
这样的东西将在http://localhost:3000
上托管服务器。在我们上面声明的路线下方添加:
server.listen(3000, function() {
console.log('Server running on port 3000');
});
最后,您需要一种方法在localhost
上向服务器发送请求。 Postman是测试快速路线的绝佳工具。
我建议安装Postman并使用它来模拟http流量。
服务器运行后,打开邮递员并通过输入服务器地址和端口向服务器发送GET
请求,然后点击蓝色发送按钮(您将向{{1}发送请求})。
Here's an image of what postman should look like if all goes well
您还应该看到中间件触发并打印出终端中的请求对象。
祝你好运!