【发布时间】:2019-02-03 06:20:14
【问题描述】:
我有一个 Node.js 函数来创建 Express 服务器。
我已将 //@ts-check 添加到文件中,以便 VSCode 对所有内容进行 lints 和类型检查。
记录这个createServer函数的正确方法是什么?
我想表明它返回一个 Promise,它解析一个包含 Express 实例 (app) 和数字 (port) 的对象
如果这是一个反模式,那也很高兴知道。
//@ts-check
const express = require('express');
/**
* @param {Number} port
* @returns {Promise}
*/
function createServer(port) {
return new Promise((resolve, reject) => {
const app = express();
server = app.listen(port, () => {
resolve({app, port});
});
});
}
【问题讨论】:
-
我一直使用
Promise<Resolving object type> -
这对我来说似乎不是一个好的模式。听后添加中间件可能无法按预期工作,具体取决于您的使用方式。我看不出用
{app, port}解决问题的充分理由。通常你只需要app。port的目的是什么?你已经把它放在了你打电话给createServer的地方。 -
@estus 感谢您指出这一点。我同意,如果我有
port作为输入,那么为什么将其添加为输出。它主要是减少我的单元测试中的重复代码,但我感谢你指出这一点 -
我猜测试实际上是您可能需要批量创建服务器的唯一地方。但请记住,将服务器实例化和监听分开是有益的。例如。 github.com/visionmedia/supertest 最适合未侦听的 Express 实例。
标签: node.js typescript visual-studio-code jsdoc ts-check