使用BB承诺创建具有空闲端口的服务器

Using BB promise to create server with free port

本文关键字:服务器 BB 承诺 创建 使用      更新时间:2023-09-26

当我运行create server &在我的单元测试中,有时我会得到以下错误:

EADDRINUSE,

现在我想通过使用模块portscanner来查找空闲端口

来处理它

我是这样做的

var http = require('http');
var Promise = require('bluebird');
var portscanner = require('portscanner');
var server = http.createServer(function (req, res) {
    if (req.url == '/fail') {
        res.end("Failed");
    } else {
        res.writeHead(200, {"Content-Type": "text/plain"});
    }
});
Promise.promisifyAll(server);
server.listenAsync(portscanner.findAPortNotInUse)
module.exports = server;

这是工作,但不确定它是否是稳定的代码

我的问题是,如果它可以这样使用它?这不是什么肮脏的变通方法,如果是的话,我怎样才能更好地处理它?

不知道为什么在这种情况下使用promise,您可以简单地使用如下命令:

portscanner.findAPortNotInUse(3000, 5000, '127.0.0.1', (error, port) =>{
    server.listen(port);
});

您可以承诺端口扫描器findapportnotinuse()并调用服务器。Listen in promises then()-function

Promise.promisifyAll(portscanner);
portscanner.findAPortNotInUseAsync(3000, 4000, '127.0.0.1').then(function(port){
    server.listen(port);
}).catch(function(){
    // your error handling
})

现在,portscanner在本地主机上搜索3000到4000之间的空闲端口,找到空闲端口后,服务器侦听该端口