我正在使用Node.js中的"type":"模块",无法导入我的文件. 我有这样的文件 struct

enter image description here

我的index.js文件

import express from 'express';
import tourRouter from './routes/tourRoutes';


const app = express();
app.use(express.json());


app.use('/api/v1/tours', tourRouter);

我的旅游路由.js

import express from 'express';
import fs from 'fs';


const tours = JSON.parse(fs.readFileSync(`../dev-data/data/tours-simple.json`));


const getAllTours = (req, res) => {
  res.status(200).json({
    status: 'success',
    results: tours.length,
    data: { tours },
  });
};


const router = express.Router();


router.route('/').get(getAllTours);


module.exports = router;

但该文件不会导入

错误[ERR_MODULE_NOT_FOUND]:找不到从...\api\index.js导入的模块‘...\api\routes\ourRoutes’

这是一个真正的基本概念,这真的把我难住了.代码在我看来是正确的.有人能告诉我我哪里错了吗?

推荐答案

根据Node.js文档的Mandatory file extensions:

使用IMPORT关键字解析相对或绝对说明符时,必须提供文件扩展名.还必须完全指定目录索引(例如,‘./startup/index.js’).

要解决您的问题,请添加文件扩展名.js,如下所示:

import express from 'express';
import {router as tourRouter} from './routes/tourRoutes.js'; //< .js extension added

然后您需要在tourRoutes.js文件中使用关键字export,如下所示:

export const router = express.Router(); //< Add export keyword
router.route('/').get(getAllTours);
//module.exports = router; //< Delete this line

Node.js相关问答推荐

monorepo内的NPM包使用不在注册表中的本地包

如何从puppeteer的page. evaluate()中获取流数据?(node.js)

如果非SQL函数在事务内部运行失败,PG-Promise事务会回滚吗?

在Node JS中获取控制台选项卡标题

如何在JavaScript中使用Mongoose将项推送到MongoDB中的重嵌套数组

带有apache Couch-db和Nano的推荐引擎:过滤特定用户的视图

JEST模拟由http服务器控制器导入的ES模块

ForbidenError:使用Express.js的CSRF令牌无效

为什么 Cors 在 NodeJS 中不起作用

MongoDB - 查找查询以判断是否存在少量字段,结合字段上的 AND

结合后端(Express)和前端(Angular)路由

Axios 响应循环通过函数只返回第一个映射对象的结果

简单的 Node js 程序但执行顺序似乎不同?

如何让 vscode 假设一个 node.js 上下文,以便它不假设 `fetch` 存在?

为什么需要在 NodeJS 应用程序中创建服务器?

什么是nestjs错误处理方式(业务逻辑错误vs.http错误)?

容器之间的 Docker HTTP 请求

JavaScript 异步编程:promise 与生成器

在单独的模块中定义 Mongoose 模型

如何在express 中设置默认路径(路由前缀)?