【问题标题】:Docker & Nodejs - ReferenceError: TextEncoder is not definedDocker & Nodejs - ReferenceError: TextEncoder is not defined
【发布时间】:2022-03-22 23:44:28
【问题描述】:

我在尝试启动 docker 容器时遇到以下错误:

错误:

server_1  | /usr/src/app/node_modules/whatwg-url/lib/encoding.js:2
server_1  | const utf8Encoder = new TextEncoder();
server_1  |                     ^
server_1  | 
server_1  | ReferenceError: TextEncoder is not defined

Dockerfile:

FROM --platform=linux/amd64 node:current-alpine

WORKDIR /usr/src/app
COPY package*.json ./

RUN npm install

COPY . .

CMD ["npm", "run", "prod"]

docker-compose.yml:

version: '3'

services:

  server:
    build:
      context: ./server
    ports:
      - "3008:3002"
    environment:
      API_PORT: "3002"
      DB_HOST: "192.168.1.211"
      DB_PORT: "27018"
      DB_NAME: "tutorialitems"
    restart: always

index.js 文件:

require('dotenv').config();
const express = require('express');
const bodyParser = require('body-parser');
const cors = require('cors');

const app = express();

app.use(cors());
app.use(bodyParser({ limit: '50mb' }));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));

//DB
const db = require('./models');
const dbConfig = require('./config/db.config');

try {
    db.mongoose.connect(`mongodb://${dbConfig.HOST}:${dbConfig.PORT}/${dbConfig.DB}`, {
        useNewUrlParser: true,
        useUnifiedTopology: true,
    })
    console.log('DB Connected!');
} catch (error) {
    console.log('Cannot connect to DB...', error);
    process.exit();
}

//Routes
require('./routes/crud.routes')(app);

app.get('/', (req, res) => {
    res.json("Server is Running")
});

app.listen(process.env.API_PORT, () => {
    console.log(`Server is listening on port ${process.env.API_PORT}`)
});

我尝试过的(但没有成功): 我更新了以下文件: node_modules > whatwg-url > lib > encoding.js from 首字母:

"use strict";
const utf8Encoder = new TextEncoder();
const utf8Decoder = new TextDecoder("utf-8", { ignoreBOM: true });

更新到:

const util = require("util");
const utf8Decoder = new util.TextEncoder("utf-8", { ignoreBOM: true });

package.json:

{
  "name": "server",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "dev": "nodemon index.js",
    "prod": "node index.js"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "body-parser": "^1.19.0",
    "cors": "^2.8.5",
    "dotenv": "^10.0.0",
    "express": "^4.17.2",
    "mongoose": "^6.1.5",
    "nodemon": "^2.0.15"
  }
}

但是当我运行我的 docker-compose 时,我仍然有同样的错误。

有人有想法吗?

感谢

【问题讨论】:

  • 能否将您的 package.json 文件添加到您的帖子中,好吗?
  • 是的,当然。完成:-)

标签: node.js docker docker-compose node-modules


【解决方案1】:

Mongoose v6.1.5 正在使用 Node 17.3.0。

包.json

{
  "name": "server",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "dev": "nodemon index.js",
    "prod": "node index.js"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "body-parser": "^1.19.0",
    "cors": "^2.8.5",
    "dotenv": "^10.0.0",
    "express": "^4.17.2",
    "mongoose": "^6.1.5",
    "nodemon": "^2.0.15"
  }
}

使用 Mongoose 6.1.5 版本更新我的 package.json 后,我的 Dockerfile 如下:

FROM --platform=linux/amd64 node:17.3.0

WORKDIR /usr/src/app
COPY package*.json ./

RUN npm install

COPY . .

CMD ["npm", "run", "prod"]

我运行以下 docker-compose 命令:

docker-compose pull
docker-compose build
docker-compose up

现在它开始工作了。似乎 docker-compose up 仍在使用以前的构建版本...因此,它无法正常工作...

【讨论】:

    【解决方案2】:

    包.json: “猫鼬”:“^6.2.7”

    Docker 文件: FROM 节点:17-slim

    我遇到了同样的错误,当我设置上述版本时(node:16-slim 到 17-slim),我的问题就消失了。谢谢..

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-03
      • 2020-12-09
      • 2018-12-26
      • 2020-06-14
      • 2019-02-08
      • 2015-11-19
      相关资源
      最近更新 更多