如何在express.js中模拟流量

时间:2018-06-14 19:25:12

标签: node.js express

我有一个响应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上调用一个函数?

谢谢!

2 个答案:

答案 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

您还应该看到中间件触发并打印出终端中的请求对象。

祝你好运!