有模块问题 Dockerizng 简单节点应用程序

Having modules problems Dockerizng simple node app

在尝试创建我的第一个 node.js 应用程序时遇到一些问题,对 JS 来说超级新..

正在尝试对应用程序进行 docker 化,就像这样:

docker build -t echo_app .
docker run -p 3000:3000 echo_app

最终目标是回显用户输入,如下所示:

http://example/?name=Eyal -> Hello Eyal
http://example/ -> Hello World

即时通讯出错

Error: Cannot find module 'express'
Require stack:
 - /app/index.js
   .
   .
  code: 'MODULE_NOT_FOUND',
  requireStack: [ '/app/index.js' ]
}

Directroy 包含:

const express = require('express')
const log4js = require('log4js')

const app = express()
const logger = log4js.getLogger()

const echo = (req, res) => {
  logger.debug("Request: ", req)
  const input = 'name' in req.query ? req.query.input : ''
  if (input.length == 0) {
    res.send('Echo World')
  } else {
    res.send(`Echo ${input}`)
  }
}
app.get('/', (req, res) => echo(req, res))
FROM mhart/alpine-node:12
WORKDIR /app
ADD . ./
ENTRYPOINT ["node", "/app/index.js"]

{
  "name": "echo",
  "version": "1.0.0",
  "description": "You talk, we talk back!",
  "main": "index.js",
  "author": "eyal",
  "license": "MIT",
  "dependencies": {
    "express": "^4.17.1",
    "js-yaml": "^3.13.1",
    "log4js": "^5.2.2",
    "saslprep": "^1.0.3"
  }
}

要启动并 运行,您首先需要通过将 npm install 添加到您的 Dockerfile 来安装节点依赖项,就像这样

FROM mhart/alpine-node:12
WORKDIR /app
ADD . ./
RUN npm install
ENTRYPOINT ["node", "/app/index.js"]

然后您需要通过添加

让您的 Node 应用程序监听请求
app.listen(3000, () => {
    console.log(`Example app listening at http://localhost:3000`)
  })

在 index.js 的底部。

最后,您的代码中有一个小错误。 req.query.input 需要 req.query.name.

这应该能让你继续前进。