【问题标题】:getting 'Error: Cannot find module' when importing routes in Express在 Express 中导入路由时出现“错误:找不到模块”
【发布时间】:2021-04-17 16:14:33
【问题描述】:

我有一个配置为使用 Typescript 的 ExpressJS 应用程序。我正在尝试添加一些路线。当我启动应用程序时,我不断收到“错误:找不到模块 'routes/api'。

这是我的 server.ts:

import express from "express";
import * as api from "routes/api";

const app = express(),
  port = 3000;
  // api = require("routes/api");

app.use("/", api.router);

app.listen(port);

这是我的路线/api.ts(更新):

import express from "express";
import { gql } from "@apollo/client";

const router = express.Router(),
  client = require("../apollo");

router.post("/graphql/:owner/:name", (req, res) => {
  client
    .query({
      query: gql`
        query($owner: String!, $name: String!) {
          repository(name: $name, owner: $owner) {
            latestRelease {
              name
              isLatest
              createdAt
              publishedAt
              updatedAt
              url
              tagName
              resourcePath
            }
          }
        }
      `
    })
    .then((result) =>
      console.log(`GraphQL response: ${JSON.stringify(result)}`)
    );
});

导出默认路由器;

我的 eslint 配置在我的 package.json 中。我尝试将 import/extensions: 0 添加到其他 StackOverflow 帖子中提到的规则部分,并在扩展部分下添加 plugin:import/typescript。没有任何效果。

这是来自我的 package.json 的 eslint 配置(更新):

"eslintConfig": {
    "settings": {
      "import/resolver": {
        "node": {
          "extensions": [
            ".js",
            ".ts"
          ]
        }
      }
    },
    "parser": "@typescript-eslint/parser",
    "extends": [
      "airbnb-base",
      "prettier",
      "eslint:recommended",
      "plugin:@typescript-eslint/recommended"
    ],
    "plugins": [
      "prettier",
      "@typescript-eslint"
    ],
    "env": {
      "es6": true,
      "browser": true
    },
    "rules": {
      "brace-style": [
        "error",
        "stroustrup"
      ],
      "comma-dangle": [
        "error",
        "never"
      ],
      "no-unused-vars": [
        "warn"
      ],
      "no-var": [
        "error"
      ],
      "one-var": [
        "error",
        "always"
      ],
      "prettier/prettier": [
        "error"
      ],
      "import/extensions": [
        "error",
        "ignorePackages",
        {
          "js": "never",
          "jsx": "never",
          "ts": "never",
          "tsx": "never"
        }
      ]
    }
  },
  "prettier": {
    "trailingComma": "none",
    "arrowParens": "always",
    "jsxBracketSameLine": false
  }

我也尝试过更改路由器的导出方式。我试过module.exports = routerexport default routerapi = require("routes/api" 都没有成功。我不明白为什么当文件路径明显正确时会出现错误。我对 Express 还是比较陌生。任何帮助将不胜感激。

更新:

这是我的文件夹结构:

-package.json
-node_modules
-server.ts
-apollo.ts
-routes
 -- api.ts

【问题讨论】:

  • 您好,请展示您的文件夹结构
  • 我添加了我的文件夹结构。
  • 试试这个 import * as api from "./routes/api";

标签: typescript express


【解决方案1】:

正如@Priyanka 建议的那样,更改 api.ts 的导入方式确实有所帮助。当我做npm run lint 时,我仍然得到Unable to resolve path to module。为了完全解决这个错误,我不得不将 api.ts 中的导出语法更改为 export default router。我还必须更新 package.json 的 eslint 配置部分。我遵循了StackOverflow post comment中的建议

【讨论】:

    猜你喜欢
    • 2021-07-04
    • 2011-07-06
    • 1970-01-01
    • 2014-05-25
    • 2020-08-18
    • 1970-01-01
    • 2019-12-13
    • 2021-10-24
    • 1970-01-01
    相关资源
    最近更新 更多