Hướng dẫn cannot find module mysql2/promise - không thể tìm thấy mô-đun mysql2/lời hứa

Tôi muốn sử dụng Docker Compose để kết nối một chương trình nút, trong một thùng chứa, với cơ sở dữ liệu MySQL, trong một thùng chứa khác.Cơ sở dữ liệu dường như bắt đầu tốt, nhưng tệp index.js của tôi đã gây ra lỗi: + updated 1 package and audited 101 packages in 3.772s found 0 vulnerabilities 0

Tôi đã thử cài đặt các gói khác nhau với NPM và thậm chí đã chỉnh sửa các dòng khác nhau trong tệp pack.json của tôi trong tuyệt vọng, nhưng không có kết quả;Luôn luôn cùng một lỗi.Dưới đây là các tệp có liên quan và đầu ra của các lệnh hoạt động cho đến nay.

$ npm cài đặt mysql2

npm WARN No repository field. npm WARN No license field. + updated 1 package and audited 101 packages in 3.302s found 0 vulnerabilities

$ sudo npm cài đặt mysql2-promise

+ updated 1 package and audited 101 packages in 3.772s found 0 vulnerabilities

package.json

{ "name": "simplyanything", "version": "1.0.0", "scripts": { "start": "node index.js" }, "description": "Actions party game", "dependencies": { "express": "^4.17.1", "mysql2": "^2.3.3", "mysql2-promise": "^0.1.4", "socket.io": "^4.4.1" }, "author": "Chris DeHaan" }

index.js

const express = require('express'); let app = express(); let http = require('http').createServer(app); const io = require('socket.io')(http, {pingTimeout: 60000}); app.use(express.static('public')); app.get('/', (req, res) => { res.sendFile(__dirname + '/index.html'); }); http.listen(3000, () => { console.log('listening on *:3000'); }); const mysql = require('mysql2/promise'); const pool = mysql.createPool({ connectionLimit : 100, host: process.env.MYSQL_HOST, user: process.env.MYSQL_USER, [.... and so on]

Dockerfile

FROM node:latest WORKDIR /sa/ COPY package.json . RUN npm install COPY . .

docker-compose.yml

version: '3.8' services: web: build: context: . env_file: ./.env command: npm start volumes: - .:/sa/ - /sa/node_modules ports: - $NODE_LOCAL_PORT:$NODE_DOCKER_PORT depends_on: - mysqldb environment: MYSQL_HOST: mysqldb mysqldb: image: mysql env_file: ./.env environment: MYSQL_ROOT_PASSWORD: $MYSQL_ROOT_PASSWORD MYSQL_DATABASE: $MYSQL_DATABASE ports: - $MYSQL_LOCAL_PORT:$MYSQL_DOCKER_PORT volumes: - mysql:/var/lib/mysql - mysql_config:/etc/mysql volumes: mysql: mysql_config:

.env

MYSQL_USER=simplyanythingUser MYSQL_ROOT_PASSWORD=[Well, you don't need to know this] MYSQL_DATABASE=simplyanything MYSQL_LOCAL_PORT=3306 MYSQL_DOCKER_PORT=3306 NODE_LOCAL_PORT=3000 NODE_DOCKER_PORT=3000

$ sudo docker xây dựng -t sa.

Sending build context to Docker daemon 9.526MB Step 1/5 : FROM node:latest ---> e6bed6a65a54 Step 2/5 : WORKDIR /sa/ ---> Using cache ---> 3da61e5a5928 Step 3/5 : COPY package.json . ---> Using cache ---> 1e7bbeaaa894 Step 4/5 : RUN npm install ---> Using cache ---> 52f36e54d698 Step 5/5 : COPY . . ---> e0a50567567b Successfully built e0a50567567b Successfully tagged sa:latest

$ node index.js

Debugger listening on ws://127.0.0.1:44273/a1b49bfc-83e7-47dd-ba53-64a8df19ccc9 For help, see: //nodejs.org/en/docs/inspector Debugger attached. listening on *:3000

(và nó hoạt động trong trình duyệt vào thời điểm này)

$ sudo docker-compose up

Starting sa_mysqldb_1 ... done Starting sa_web_1 ... done Attaching to sa_mysqldb_1, sa_web_1 mysqldb_1 | 2022-02-08 08:31:21+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.28-1debian10 started. mysqldb_1 | 2022-02-08 08:31:21+00:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql' mysqldb_1 | 2022-02-08 08:31:21+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.28-1debian10 started. mysqldb_1 | 2022-02-08T08:31:21.660916Z 0 [System] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.0.28) starting as process 1 mysqldb_1 | 2022-02-08T08:31:21.747461Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started. web_1 | web_1 | > start web_1 | > node index.js web_1 | mysqldb_1 | 2022-02-08T08:31:23.587278Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended. web_1 | node:internal/modules/cjs/loader:936 web_1 | throw err; web_1 | ^ web_1 | web_1 | Error: Cannot find module 'mysql2/promise' web_1 | Require stack: web_1 | - /sa/index.js web_1 | at Function.Module._resolveFilename (node:internal/modules/cjs/loader:933:15) web_1 | at Function.Module._load (node:internal/modules/cjs/loader:778:27) web_1 | at Module.require (node:internal/modules/cjs/loader:999:19) web_1 | at require (node:internal/modules/cjs/helpers:102:18) web_1 | at Object.<anonymous> (/sa/index.js:13:15) web_1 | at Module._compile (node:internal/modules/cjs/loader:1097:14) web_1 | at Object.Module._extensions..js (node:internal/modules/cjs/loader:1149:10) web_1 | at Module.load (node:internal/modules/cjs/loader:975:32) web_1 | at Function.Module._load (node:internal/modules/cjs/loader:822:12) web_1 | at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:77:12) { web_1 | code: 'MODULE_NOT_FOUND', web_1 | requireStack: [ '/sa/index.js' ] web_1 | } web_1 | web_1 | Node.js v17.4.0 mysqldb_1 | 2022-02-08T08:31:25.086275Z 0 [Warning] [MY-010068] [Server] CA certificate ca.pem is self signed. mysqldb_1 | 2022-02-08T08:31:25.086445Z 0 [System] [MY-013602] [Server] Channel mysql_main configured to support TLS. Encrypted connections are now supported for this channel. mysqldb_1 | 2022-02-08T08:31:25.277625Z 0 [Warning] [MY-011810] [Server] Insecure configuration for --pid-file: Location '/var/run/mysqld' in the path is accessible to all OS users. Consider choosing a different directory. mysqldb_1 | 2022-02-08T08:31:25.354311Z 0 [System] [MY-011323] [Server] X Plugin ready for connections. Bind-address: '::' port: 33060, socket: /var/run/mysqld/mysqlx.sock mysqldb_1 | 2022-02-08T08:31:25.355558Z 0 [System] [MY-010931] [Server] /usr/sbin/mysqld: ready for connections. Version: '8.0.28' socket: '/var/run/mysqld/mysqld.sock' port: 3306 MySQL Community Server - GPL.

Tôi thực sự bị mắc kẹt bởi vì mọi thứ nó cần dường như được cài đặt và nó hoạt động khi tôi chạy nó trên dòng lệnh với + updated 1 package and audited 101 packages in 3.772s found 0 vulnerabilities 1 nên rõ ràng là có thứ gì đó tôi thiếu khi thiết lập container của mình hoặc kết nối để kết nối chúng.Bât cư lơi khuyên nao cung se được đanh gia cao.Chúc mừng.

Chủ đề