【问题标题】:Installed module 'express-validator' cannot be found in NodeJS/Express project在 NodeJS/Express 项目中找不到已安装的模块“express-validator”
【发布时间】:2021-11-26 21:15:59
【问题描述】:

我想验证端点在调用它时收到的输入。因此,我在我的 NodeJS Web 应用程序中安装了express-validator。但是,当我尝试使用它时,它会抛出错误:

Cannot find module 'express-validator' or its corresponding type declarations

当我导入它(即import { validationResult } from "express-validator";)或将其设置为常量并需要它时,就会发生这种情况。在后者中,它声明它找不到模块。我已经对项目进行了 docker 化,这是我设置的 dockerfile:

FROM node:12

WORKDIR /app

COPY package*.json ./

RUN npm install

COPY . .

EXPOSE 8000

CMD ["npm", "run", "dev"]

目前,我没有运行生产版本,这就是我使用 dev 运行的原因。这是我的 docker-compose 文件:

services:
  db:
    image: postgres:12
    environment:
      - POSTGRES_DB=server_side
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=123321
  app:
    build:
      context: .
      dockerfile: Dockerfile
    volumes:
      - ./src:/app/src
    ports:
      - "8000:8000"
    depends_on:
      - db
    environment:
      - POSTGRES_DB=server_side
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=123321
      - POSTGRES_HOST=db

安装模块时,它会被添加到我的依赖项中:

{
  "name": "Servier-side",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "build": "tsc",
    "dev": "concurrently \"nodemon\" \"nodemon -x tsoa spec\"",
    "start": "node build/index.js",
    "predev": "npm run swagger",
    "prebuild": "npm run swagger",
    "swagger": "tsoa spec",
    "typeorm": "node --require ts-node/register ./node_modules/typeorm/cli.js",
    "migrate:generate": "npm run typeorm migration:generate -- -n",
    "migrate:run": "npm run typeorm migration:run",
    "migrate:revert": "npm run typeorm migration:revert",
    "schema:drop": "npm run typeorm schema:drop"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "@types/express": "^4.17.13",
    "@types/morgan": "^1.9.3",
    "@types/node": "^16.11.10",
    "@types/swagger-ui-express": "^4.1.3",
    "concurrently": "^6.4.0",
    "nodemon": "^2.0.15",
    "ts-node": "^10.4.0",
    "typescript": "^4.5.2"
  },
  "dependencies": {
    "express": "^4.17.1",
    "express-validator": "^6.13.0",
    "morgan": "^1.10.0",
    "pg": "^8.7.1",
    "reflect-metadata": "^0.1.13",
    "swagger-ui-express": "^4.1.6",
    "tsoa": "^3.2.1",
    "typeorm": "^0.2.41"
  },
  "nodemonConfig": {
    "watch": [
      "src"
    ],
    "ext": "ts",
    "exec": "ts-node src/index.ts"
  }
}

如果有人能阐明此事,我将不胜感激。只是为了排除可能的原因,我也尝试了Joi,但我最终遇到了同样的问题。所以,我想了解是什么导致了问题 - 为什么对其余依赖项有效,而不是对这个依赖项有效,应该采取什么措施来解决问题?

【问题讨论】:

    标签: node.js docker express joi express-validator


    【解决方案1】:

    这种错误通常是在需要为模块添加@types dependency时。

    【讨论】:

    • 尽管作者声明:“这是 express-validator (github.com/ctavan/express-validator) 的存根类型定义。express-validator 提供了自己的类型定义,因此您不需要 @types/已安装 express-validator!”?
    【解决方案2】:

    使用构建标志 docker-compose up --build 运行 docker compose 修复了该问题。

    【讨论】:

      猜你喜欢
      • 2017-01-23
      • 1970-01-01
      • 1970-01-01
      • 2021-11-19
      • 1970-01-01
      • 2012-03-24
      • 2011-08-20
      • 2017-02-24
      • 1970-01-01
      相关资源
      最近更新 更多