首页 > 解决方案 > NodeJS:文件已导入,但未执行

问题描述

这是我在 NodeJS 服务器中的文件结构:

src
 - api
 - - methods
 - - - SOME_API_METHOD.js
 - - - ANOTHER_API_METHOD.js
 - - - THIRD_API_METHOD
 - - - - index.js
 - - - - THIRD_API_METHOD.js <- that's the file that caused a problem
 - - - - someHelperFIleForTheThirdApiMethod.js
 - - - THIRD_API_METHOD.js <- this is the file I added eventually to fix the issue
 - - index.js
 - index.js
 - gateway.js <- that's where the the THIRD_API_METHOD is called from

gateway.js看起来像这样:

import api from './api'
export default (req, res) => {
  if (api[req.body.method]) {
    console.log(`all good, execute ${req.body.method}`)
    api[req.body.method](req.body.payload, res)
    console.log('execution finished')

  }
}

src/api/methods/THIRD_API_METHOD/index.js

import THIRD_API_METHOD from './THIRD_API_METHOD'
export default THIRD_API_METHOD

src/api/methods/THIRD_API_METHOD/THIRD_API_METHOD.js

console.log('THIRD_API_METHOD mounted')
export default async () => {
  console.log('starting THIRD_API_METHOD')
}

所以,当我尝试执行时THIRD_API_METHOD,我只得到了all good, execute THIRD_API_METHODexecution finished日志。不是其他人。我必须添加src/api/methods/THIRD_API_METHOD.js以下内容来解决问题:

import THIRD_API_METHOD from './THIRD_API_METHOD/THIRD_API_METHOD'
export default THIRD_API_METHOD

然后我有这些日志:

THIRD_API_METHOD mounted
all good, execute THIRD_API_METHOD
starting THIRD_API_METHOD
execution finished

这意味着一切都很好。

那么,这到底是怎么可能的呢?我已经将所有内容都包含在try...catch声明中,认为某处存在静默错误。没有什么。此外,我还有另一种方法包装在一个文件夹中,就像THIRD_API_METHOD那个该死的作品一样。在我的本地 NodeJS 10 环境中,原始结构也可以正常工作。它似乎仅在部署到 kube 引擎的 docker 容器中工作。

无论如何,怎么可能一切import正常但文件没有挂载?

ps我知道,我必须在docker中做所有事情,我正在这样做,我只是想知道这个问题是怎么可能的。

Dockerfile:

FROM node:9.4.0

COPY ./dist /server/dist
COPY ./node_modules /server/node_modules

ENV PORT 80

EXPOSE 80

WORKDIR /server/dist

ENTRYPOINT [ "node", "index.js" ]

标签: node.jsdocker

解决方案


推荐阅读