Express路由导出报错及Mongo模型导出问题解决求助
Express路由导出错误排查与解决
- 确认路由实例的创建和导出逻辑:
无论使用CommonJS还是ES模块,都要保证路由对象被正确导出。
CommonJS示例:
ES模块示例:const express = require('express'); const router = express.Router(); // 示例路由 router.get('/posts', (req, res) => { res.json({ data: '所有文章' }); }); // 导出路由实例 module.exports = router;import express from 'express'; const router = express.Router(); router.get('/posts', (req, res) => { res.json({ data: '所有文章' }); }); export default router; - 在主应用文件中正确导入并挂载路由:
注意路径要和文件实际位置匹配,比如路由文件在./routes/posts.js,主文件导入时要写对相对路径:
CommonJS:
ES模块:const postRouter = require('./routes/posts'); app.use('/api', postRouter); // 可加前缀统一管理路由import postRouter from './routes/posts.js'; app.use('/api', postRouter); - 排查常见错误:不要把
router写成Router(大小写错误),或忘记调用express.Router()创建实例。
MongoDB模型导出错误排查与解决
- 模型定义后必须正确导出,避免漏写导出语句:
CommonJS示例:
ES模块示例:const mongoose = require('mongoose'); const PostSchema = new mongoose.Schema({ title: String, content: String, createdAt: { type: Date, default: Date.now } }); // 导出模型 const Post = mongoose.model('Post', PostSchema); module.exports = Post;import mongoose from 'mongoose'; const PostSchema = new mongoose.Schema({ title: String, content: String, createdAt: { type: Date, default: Date.now } }); // 命名导出或默认导出都可,保持导入导出一致即可 export const Post = mongoose.model('Post', PostSchema); // 或者 export default mongoose.model('Post', PostSchema); - 避免重复注册模型:如果在多个文件中需要使用同一个模型,不要重复调用
mongoose.model('Post', schema),可以用mongoose.model('Post')直接获取已注册的模型,防止抛出"OverwriteModelError"。 - 导入时匹配导出方式:如果模型是默认导出,导入用
import Post from './models/Post.js';如果是命名导出,用import { Post } from './models/Post.js',不要混着用。
内容的提问来源于stack exchange,提问作者user20861936
相关产品推荐
相关产品推荐

