Node.js экспресс.Маршрутизатор ERR_MODULE_NOT_FOUND при импорте новых маршрутов

#javascript #node.js #express #types

Вопрос:

Я испытываю странную ошибку. Я просто создавал новую папку, чтобы разделить свои маршруты.

Внутри я создал маршруты с помощью express.Router API и экспортировал сам маршрутизатор.

Вот как выглядит код внутри post-routes.ts :

 import express from 'express';

const router = express.Router();

router.get( '/', ( req, res ) =>
{
    res.send( 'This is working' );
} );

export default router;
 

ОК. Все, что мне нужно сделать сейчас, это импортировать его в свой index.ts и создать корневой маршрут для моего post-routes.ts файла.

Пожалуйста, скажите мне, если вы видите что-то неправильное в моем подходе.

index.ts файл:

 import express from 'express';
import cors from 'cors';
import postRouter from './routes/post-routes';

const PORT = process.env.PORT || 5000;

app.use( '/posts', postRouter );


app.use( express.json( { limit: '30mb' } ) );
app.use( express.urlencoded( { limit: '30mb', extended: true } ) );
app.use( cors() );

app.listen( PORT, () => console.log( `listening at ${ PORT }` ) );
 

Хорошо. Теперь, чтобы предоставить как можно больше информации, я вставлю следующее:

  1. Структура файлов внутри моего проекта:

СТРУКТУРА ФАЙЛА

  1. package.json конфигурация файла:

ФАЙЛ PACKAGE.JSON

Как вы можете видеть, я использую "type": "module" , чтобы иметь возможность использовать импорт внутри моего приложения узла. Что касается машинописного текста, я не получаю ошибок компиляции, поэтому index.ts вижу post-routes.ts файл, поэтому я ожидал index.js бы post-routes.js , что он также увидит файл. Но сервер выдает ошибку ниже. Как такое может быть?

Error [ERR_MODULE_NOT_FOUND]: Cannot find module 'E:Githubhospytal-fasionserverdistroutespost-routes' imported from E:Githubhospytal-fasionserverdistindex.js

Ответ №1:

Помимо того , что убедитесь, что target и module esnext в вашем tsconfig.json , убедитесь, что в вашем импорте указаны расширения файлов. т. е. попробуйте изменить следующую строку:

 import postRouter from './routes/post-routes';
 

Для

 import postRouter from './routes/post-routes.ts';
 

Комментарии:

1. Это верно. За одним исключением. Это должно быть .js расширение. Я уже использую esnext в target и модуле в моем tsconfig.json . Это tsc не преобразование .ts расширений в .js единицы.