VSCode module.exports自动完成不起作用

时间:2019-02-03 18:48:28

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

使用最新的VSCode版本1.30.2,并且看不到导出模块内部的功能。

这在model.js中

var userModel = mongoose.model('userModel', usersSchema);
userModel.isUsernameTaken = isUsernameTaken;
module.exports = userModel;

function isUsernameTaken(username) {
    return userModel.findOne({username:username});
}

和在app.js中

var userModel = require('./model');

现在键入userModel。在app.js中,我应该看到有关isUsernameTaken自动完成的建议,但它不存在,并且模型中声明的任何函数也不是“可见的”。但是,如果我键入确切的函数名称(区分大小写)。 (例如:userModel.isUserNameTaken(etc)),它可以正常工作。怎么了?

2 个答案:

答案 0 :(得分:0)

当您说userModel.isUsernameTaken(username)时,您真正说的是mongoose.model('userModel', usersSchema).isUsernameTaken(username),其中的返回值是未定义的。您需要做的是使用户模型成为内部带有mongoose.model('userModel', usersSchema)的对象。有点像这样:

var userModel = function () {
    this.model: mongoose.model('userModel', usersSchema),
    this.isUsernameTaken: (username) => {
        return this.model.findOne({username:username});
    }
};

然后,如果要访问这些属性,则可以使用 var user = new userModel();,然后使用user.isUsernameTaken(/*put username here*/);。或者,如果您想单独访问模型,则可以执行:user.model。我希望这能回答您的问题。

答案 1 :(得分:0)

我设法通过更改model.js来修复它

module.exports.default = userModel;

,然后在另一个文件中:

var userModel = require(./model).default;

现在,智能感知可以正常工作了。