寄售和快递路径问题

Mat*_*ent 5 javascript node.js express

我目前正在研究一些大学课程,它本质上是一个用 express 编写的 API。只要我们遵循规范,我们就可以使用其他软件包。

我正在尝试使用consign来自动加载我的模型、中间件和路由。我面临的问题是我们必须遵循的文件夹结构。

coursework
|-- artifact
|   |-- server
|   |   |-- api
|   |   |   |-- models
|   |   |   |   `-- stories.js
|   |   |   |-- middleware
|   |   |   |   `-- stories.js
|   |   |   `-- routers
|   |   |       `-- stories.js
|   |   |-- node_modules
|   |   |-- package.json
|   |   |-- package-lock.json
|   |   `-- server.js
|   `-- utilities
|-- node_modules
|-- webpages
|-- package.json
|-- package-lock.json
`-- test.js
Run Code Online (Sandbox Code Playgroud)

里面artifact是我们所有代码所在的地方,没有其他任何东西被触及。包含的根目录test.js是我们将被评估的地方。我们从根运行npm test(QUnit),然后它会列出哪些测试已经通过,哪些测试失败。

问题是我们必须通过调用从根目录启动我们的服务器,node artifact/server这很好,因为它调用artifact/server/server.js.

artifact/server/server.js我内部有以下代码要初始化consign

consign({ cwd: './artifact/server/api' })
    .include('models')
    .then('middleware')
    .then('routers')
    .into(app);
Run Code Online (Sandbox Code Playgroud)

当我node artifact/server目录运行时,出现以下错误:

寄售错误

令人沮丧的是,如果我将 consign 的cwd属性更改为api,然后artifact/server通过调用node server.js它在内部启动服务器,它工作得很好。

问题是我需要能够从根目录启动服务器。我完全卡住了,因为我不知道如何修改 consign 以从根目录工作。

有任何想法吗?

Mat*_*ent 2

我设法找到了问题的解决方案,并觉得我应该发布答案来帮助其他人。

本质上,如上所示,我使用的是相对路径,如下所示:

consign({ cwd: './artifact/server/api' })
    .include('models')
    .then('middleware')
    .then('routers')
    .into(app);
Run Code Online (Sandbox Code Playgroud)

当从根目录调用时,会导致委托无法工作。这可以通过使用来解决path

我将其添加到文件顶部server.js

const path = require('path');
Run Code Online (Sandbox Code Playgroud)

然后将我的委托初始化更改为:

consign({ cwd: path.join(__dirname, 'api') })
    .include('models')
    .then('middleware')
    .then('routers')
    .into(app);
Run Code Online (Sandbox Code Playgroud)

这解决了我的问题!