如何将MongoDB Schema导出到独立文件并用于数据插入?代码求助
问题分析与修复方案
核心错误点
- Schema文件导出语法错误:
data.js中使用module.exports(User)是错误写法,module.exports是一个对象,需通过赋值导出内容,而非函数调用。 - 缺少数据插入逻辑:
file1.js的POST /login接口仅打印请求参数,未实际调用User模型执行数据插入操作。 - MongoDB连接未处理错误:mongoose连接仅写了
then,未添加catch捕获连接失败的异常。
修正后的代码
1. data.js(Schema/模型文件)
const mongoose = require('mongoose'); const userData = new mongoose.Schema({ phoneNumber: String, }); const User = mongoose.model('User', userData); // 正确导出模型:直接赋值给module.exports module.exports = User;
2. file1.js(主服务文件)
require('dotenv').config() // 导入修正后的User模型 const User = require('./assets/js/data') const bodyParser = require("body-parser"); const mongoose = require('mongoose'); const express = require('express'); // 完善MongoDB连接的错误处理 mongoose.connect(process.env.url, { useNewUrlParser: true }) .then(() => { console.log('Connected to MongoDB server'); }) .catch(err => { console.error('MongoDB connection failed:', err); }); const app = express(); app.set('views', './static/html'); app.set('view engine', 'ejs'); app.use(express.static('assets')); app.use(bodyParser.json()); app.use(bodyParser.urlencoded({ extended: true })); app.get('/', (req, res) => { res.render('main') }); app.get('/login', (req, res) => { res.render('login') }); app.post('/login', async (req, res) => { try { // 从请求体获取手机号,创建新用户实例并保存 const newUser = new User({ phoneNumber: req.body.number }); await newUser.save(); console.log('用户数据插入成功'); res.send('登录数据已保存'); // 返回响应给客户端 } catch (err) { console.error('数据插入失败:', err); res.status(500).send('数据保存失败'); } }); app.listen(3000, (err) => { console.log("running server on port 3000") if (err) { return console.log(err); } })
补充说明
- 如果需要导出多个模型,
data.js可以用对象形式导出:
对应的导入方式改为:module.exports = { User, // 其他模型... };const { User } = require('./assets/js/data'); - 使用
async/await处理MongoDB的异步操作,确保数据插入完成后再给客户端返回响应,避免异步回调导致的逻辑混乱。
内容的提问来源于stack exchange,提问作者DevExodus
相关产品推荐
相关产品推荐

