You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 20:30:41