代码之家  ›  专栏  ›  技术社区  ›  emrys57

如何在express.js中模拟流量

  •  0
  • emrys57  · 技术社区  · 6 年前

    我有一个对http流量作出响应的node express服务器:

    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();
    });
    

    一切都很好。我希望在节点服务器上有一个程序在没有网络连接的情况下将模拟的http流量注入到express堆栈中。我不能就这样 (req,res) 配对并调用类似于 app.use 上面,因为我没有 next 给它,我的 req res 不会是那个 下一个 传递到堆栈中的下一个中间件。

    编辑 :我实际拥有的是一个websocket连接,它发送不同格式的数据包,来自http流量的不同数据内容,也可以携带相同的信息。我可以获取这些websocket包,并从这些包生成一个与http流量使用的格式相同的请求。我想通过express http中间件堆栈传递转换后的请求,并以相同的方式处理它。回到创建一个刚刚处理了ws请求的http请求似乎有点遥远。

    请问,模拟某些流量的最简单方法是什么?我能在上调用函数吗 app ?调用一些express中间件,或者编写一个自己的中间件来注入流量?调用函数 server ?

    谢谢!

    2 回复  |  直到 6 年前
        1
  •  1
  •   janfabian    6 年前

    通过调用一些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流量注入express堆栈

    你能解释一下,为什么没有网络连接?

        2
  •  0
  •   ryanpierre    6 年前

    有几件事:

    • 你需要做一个端点
    • 你需要把你的服务器放在某个地方
    • 您需要一些东西来向服务器发送请求

    express为您提供了一种接收请求的方式( 情商 ,res)(可能来自浏览器,也可能不是),执行一些操作,并返回响应(req, 物件 )致请求者。

    表达

    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

    接下来,您需要将您的express服务器托管在可以向其发送请求的位置。你的本地机器( localhost )是个好地方。这样,你就不需要互联网连接了。

    选择一个要承载服务器的端口,然后可以在 http://localhost:<Your Port> .

    类似这样的东西将在 http://localhost:3000 。在我们上面声明的路线下面添加:

    server.listen(3000, function() {
        console.log('Server running on port 3000');
    });
    

    最后,需要一种方法将请求发送到 本地服务器 Postman 是测试快速路线的好工具。

    我建议安装邮递员 模拟http流量 .

    服务器运行后,打开postman并发送 得到 通过输入服务器地址和端口并点击蓝色的发送按钮(将请求发送到 http://localhost:3000/test )

    Here's an image of what postman should look like if all goes well

    您还应该看到中间件启动并在终端中打印出请求对象。

    祝你好运!