如何在vscode中获取外部文件中表达的中间件的智能感知?

时间:2018-06-29 10:37:32

标签: javascript node.js express visual-studio-code intellisense

我正在尝试编写express的中间件。然后我将其写在单个文件test2.js

在服务器中,我可以具有如下的智能感知:

enter image description here

在该单个文件中,中间件工作正常,但我对 req和res

的理解不够。

有没有办法获得智能感知?


这是我的服务器 test1.js

//test1.js
let http = require("http");
let express = require("express");
let app = express();

let middle = require("./test2.js");
app.use(middle);

app.use(function(req, res, next) {
  next();
});
http.createServer(app).listen(80);

这是我的中间件 test2.js

//test2.js
module.exports = function(req, res, next) {
  console.log("middle");
  next();
};

1 个答案:

答案 0 :(得分:1)

也许可以选择JSDoc?您可能需要npm i @types/express -D(但我认为vscode仍会在后台为您完成此操作)

// The require is painful. I wonder if there is a away to do without it?
const Express = require("express");

/** @type {Express.RequestHandler} */
module.exports = function (req, res, next) {
    req.???
    next();
}

或者您也可以开始使用打字稿。 ;)

https://github.com/Microsoft/TypeScript/wiki/JSDoc-support-in-JavaScript


我发现您可以使用打字稿声明文件:

myTypes.d.ts

import Express from "express";
declare global { 
    type RequestHandler = Express.RequestHandler;
}

Typescript类型通常绑定到模块的作用域,但是您可以导入任何类型并在全局作用域中重新声明它。

现在,vscode可以找到没有添加任何导入的类型。

myMiddleware.js

/** @type RequestHandler */
module.exports = function (req, res, next) {
    req. // intellisense works
}