首页 > 解决方案 > ExpressJs 模块未定义。无法读取未定义的属性“路由器”

问题描述

感谢您花时间看我的问题。我将首先提供所有必需的信息,尽我所能描述。

这是我的目录结构。

注意: ( ) 星号代表一个文件。(-) 连字符表示目录。*

* app.js
- config
    * modules.js
    * functions.js
    * info.js
- routes
    * root.js

文件功能的说明。

config/modules.js 通过以下方式在其中包含所需的模块列表。

module.exports = {
    express: require( 'express' ),
    bodyParser: require( 'bodyParser' ),
    someModule: require( 'someModule' ),
    .
    .
    . *the list goes on*
}

config/functions.js 只有几个函数,比如 getCurrentTime 等,它工作正常,所以可以忽略;也与问题无关。

config/info.js 有一些应用程序常量,如端口、dbURL 等。它是这样的,

module.exports.app = {
    port: 3000,
    db: "mongodb://localhost/dev-db-something"
}

当我需要 app.js 文件中的 config/modules 文件时,我可以完美地使用变量并且没有问题。但是当我在路由/根文件中需要相同的配置/模块时,它给了我无法读取未定义的属性“路由器”的错误。

routes/root 文件的代码如下,

const modules = require( '../config/modules' );
const express = modules.express;
const router  = express.Router();

    router.get( '/', (req, res) => { 
        res.send( 'Welcome!' );
    } );

module.exports = router;

我为此使用 VS Code。当我将鼠标悬停在“模块”上时。在 app.js 文件中,VS Code 通过显示悬停弹出窗口向我显示所需模块的列表。但是当我在路由/根文件中执行相同操作时,它会向我显示“const modules:any”悬停弹出窗口。更准确地说,这个“const modules:any”仅在我添加“const router = express.Router();”后出现

标签: node.jsnode-modules

解决方案


推荐阅读