运行mongoose的populate.js时报错:String不是Schema中name路径的有效类型
问题描述
项目链接:https://github.com/k4u5hik/node-express-course
我尝试使用populate.js,通过mongoose将products.json中的数据自动导入到我的MongoDB数据库,Schema定义在product.js文件中。
product.js代码
const mongoose = require('mongoose') const productSchema = new mongoose.Schema({ name: { type: String, required: [true, 'product price must be provided'], }, price: { type: Number, required: [true, 'product price must be provided'], }, featured: { type: Boolean, default: false, }, rating: { type: Number, default: 4.5, }, createdAt: { type: Date, default: Date.now(), }, company: { type: String, enum: { values: ['ikea', 'liddy', 'caressa', 'marcos'], message: '{VALUE} is not supported', }, // enum: ['ikea', 'liddy', 'caressa', 'marcos'], }, }) module.exports = mongoose.model('Product', productSchema)
populate.js代码
require ('dotenv').config() const connectDB = require('./db/connect') const Product = require('./models/product') const jsonProducts = require('./products.json') const start = async () => { try { await connectDB(process.env.MONGO_URI) await Product.deleteMany() await Product.create(jsonProducts) console.log('Products created or updated on database') process.exit(0) } catch (error) { console.log(error); } } start()
报错信息
kaushik@Madhuras-Air 04 - Practice % node populate /Users/kaushik/WebstormProjects/node-express-course/04 - Practice/node_modules/mongoose/lib/schema.js:1044 throw new TypeError(`Invalid schema configuration: \`${name}\` is not ` + ^ TypeError: Invalid schema configuration: `String` is not a valid type at path `name`. See bit.ly/mongoose-schematypes for a list of valid schema types. at Schema.interpretAsType (/Users/kaushik/WebstormProjects/node-express-course/04 - Practice/node_modules/mongoose/lib/schema.js:1044:11) at Schema.path (/Users/kaushik/WebstormProjects/node-express-course/04 - Practice/node_modules/mongoose/lib/schema.js:684:27) at Schema.add (/Users/kaushik/WebstormProjects/node-express-course/04 - Practice/node_modules/mongoose/lib/schema.js:536:14) at new Schema (/Users/kaushik/WebstormProjects/node-express-course/04 - Practice/node_modules/mongoose/lib/schema.js:132:10) at Object.<anonymous> (/Users/kaushik/WebstormProjects/node-express-course/04 - Practice/models/product.js:3:23) at Module._compile (node:internal/modules/cjs/loader:1101:14) at Object.Module._extensions..js (node:internal/modules/cjs/loader:1153:10) at Module.load (node:internal/modules/cjs/loader:981:32) at Function.Module._load (node:internal/modules/cjs/loader:822:12) at Module.require (node:internal/modules/cjs/loader:1005:19) at require (node:internal/modules/cjs/helpers:102:18) at Object.<anonymous> (/Users/kaushik/WebstormProjects/node-express-course/04 - Practice/populate.js:4:17) at Module._compile (node:internal/modules/cjs/loader:1101:14) at Object.Module._extensions..js (node:internal/modules/cjs/loader:1153:10) at Module.load (node:internal/modules/cjs/loader:981:32) at Function.Module._load (node:internal/modules/cjs/loader:822:12)
已有排查情况
- 导师本地运行代码无问题,排除代码逻辑错误
- 已确认环境变量配置正确
解决方案
从报错栈可以判断,错误在加载product.js初始化Schema阶段就已触发,和数据库连接、JSON数据导入逻辑无关,按以下步骤排查即可:
- 排查mongoose版本差异:执行
npm list mongoose查看本地安装的mongoose版本,和导师使用的版本做对比。如果版本不一致,卸载本地版本后安装对应稳定版即可,例如执行npm install mongoose@6.10.0安装常用的稳定版本,避免使用测试版/预发布版触发兼容性问题。 - 重装损坏的依赖包:本地依赖安装过程中可能出现文件损坏的情况,先删除node_modules目录和包锁文件:
再重新安装所有依赖:rm -rf node_modules package-lock.json yarn.locknpm install - 排查代码中的不可见字符:如果是复制粘贴的代码,可能附带了零宽空格等不可见字符,导致Mongoose无法正确识别
String等类型关键字。手动重写product.js中所有type: String、type: Number等字段定义行即可。 - 验证mongoose引入有效性:在product.js首行引入mongoose后添加打印逻辑
console.log(mongoose.Schema.Types.String),如果输出为undefined,说明mongoose引入异常,回到重装依赖步骤处理即可。
内容的提问来源于stack exchange,提问作者Kaushik C
相关产品推荐
相关产品推荐

