我正在尝试将我的路由分离到routes.js
中的单独模块,然后在app.js
中导入。我在控制台中收到很多错误。
internal/modules/esm/default_resolve.js:96
let url = moduleWrapResolve(specifier, parentURL);
^
Error: Cannot find module /Users/rhoxh/Desktop/24/routes imported from /Users/rhoxh/Desktop/24/app.js
at Loader.resolve [as _resolve] (internal/modules/esm/default_resolve.js:96:13)
at Loader.resolve (internal/modules/esm/loader.js:73:33)
at Loader.getModuleJob (internal/modules/esm/loader.js:147:40)
at ModuleWrap.<anonymous> (internal/modules/esm/module_job.js:41:40)
at link (internal/modules/esm/module_job.js:40:36) {
code: 'ERR_MODULE_NOT_FOUND'
}
路线.js
import express from 'express';
const router = express.Router();
router.get('/', (req, res) => {
res.send('home page');
});
export default router;
应用.js
import express from 'express';
import { router } from './routes';
const app = express();
const PORT = 8080;
app.listen(PORT, () => {
console.log(`Server running at: http://localhost:${PORT}/`);
});
// Routes
app.use('/', router);
我在这里做错了什么?
您需要使用完整的文件名:
import router from './routes.js';
从文档中:
模块名称
要从中导入的模块。这通常是相对的或 包含模块的.js文件的绝对路径名。一定 捆绑商可以允许或要求使用该扩展;检查您的 环境。只允许单引号和双引号字符串。
您可以查看此链接,它可以帮助您 https://github.com/nodejs/node/issues/27408
您可以尝试按照它所说的使用--es-module-specifier-resolution=node
。
对于任何寻找打字稿解决方案的人,请使用转译文件的.js文件扩展名。
// index.ts file.
import router from './routes.js';
您正在解构导入,但您正在导出为default
。 导入默认值时,无需解构
import router from './routes';
使用命名导出时,可以使用解构
export const router = express.Router()
或者你从default export
中提取一个属性
export default {
router: express.Router()
}