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

如何在Mongoose Schema中配置文件附件?使用File类型报错

Mongoose中配置文件附件报错:Error: File is not defined 解决方法

问题根源

Mongoose根本没有内置的File类型,你代码里写的type: File中的File是一个未定义的变量,这就是报错的直接原因。

解决方案

根据你实际的文件存储需求,选下面两种方案之一:

方案1:存储文件路径/URL(推荐)

大多数场景下,我们不会直接把文件存在MongoDB里,而是把文件上传到服务器本地或者云存储,然后把文件的路径或URL存在数据库中。这也是你之前用String类型能正常运行的原因,直接沿用这个思路即可:

const mongoose = require('mongoose');
const { Schema } = mongoose;

const NoteSchema = new Schema({
  user: {
    type: mongoose.Schema.Types.ObjectId,
    ref: 'user',
  },
  title: {
    type: String,
    required: true,
  },
  // 改成String类型存储文件路径/URL
  attachmentUrl: { 
    type: String,
    required: true,
  },
  tag: {
    type: String,
    default: 'General',
  },
  date: {
    type: Date,
    default: Date.now,
  },
});

module.exports = mongoose.model('notes', NoteSchema);

注:我把字段名从description改成了attachmentUrl,更贴合用途,你也可以保留原字段名,只改类型。

方案2:存储文件二进制数据(不推荐)

如果一定要把文件的二进制内容存在MongoDB里,可以用Mongoose的Buffer类型:

const mongoose = require('mongoose');
const { Schema } = mongoose;

const NoteSchema = new Schema({
  user: {
    type: mongoose.Schema.Types.ObjectId,
    ref: 'user',
  },
  title: {
    type: String,
    required: true,
  },
  // 用Buffer类型存储二进制文件数据
  attachmentData: { 
    type: Buffer,
    required: true,
  },
  // 建议额外存文件的MIME类型,方便后续读取
  attachmentMimeType: {
    type: String,
    required: true,
  },
  tag: {
    type: String,
    default: 'General',
  },
  date: {
    type: Date,
    default: Date.now,
  },
});

module.exports = mongoose.model('notes', NoteSchema);

这种方式会让你的数据库体积快速膨胀,读写性能也会受影响,只适合极小的文件场景。

额外提示

处理文件上传时,你需要用multer这类中间件来接收前端上传的文件,再根据选择的方案把路径或二进制数据存入数据库,不是直接在Schema里用不存在的File类型。

内容的提问来源于stack exchange,提问作者CodeWithSaadi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 07:20:34