所以我正在研究将服务器连接到数据库的expressJs和mongoosh。为了插入文档,我创建了不同的文件“data.js”,并要求此 data.js 到 index.js。主要错误是验证失败
我的模型和 init 路径(用于初始化)。
**project
├───init
│ index.js
│ data.js
└───models
listing.js**
index.js
const mongoose = require("mongoose");
const initData = require("./data.js");
const Listing = require("../models/listing.js");
main()
.then(() => console.log("Connected to DB"))
.catch(err => console.log(err));
async function main() {
await mongoose.connect('mongodb://127.0.0.1:27017/wanderlust');
}
const initDB = async () => {
await Listing.deleteMany({});
await Listing.insertMany(initData.data);
console.log("Data was initialized...");
};
initDB();
数据.js
const sampleListings = [
{
title: "Cozy Beachfront Cottage",
description:
"Escape to this charming beachfront cottage for a relaxing getaway. Enjoy stunning ocean views and easy access to the beach.",
image: {
filename: "listingimage",
url: "https://unsplash.com/photos/hallway-of-building-LfqmND-hym8",
},
price: 1500,
location: "Malibu",
country: "United States",
},
];
module.exports = { data: sampleListings };
listing.js
const mongoose =require("mongoose");
const Schema=mongoose.Schema;
const listingSchema= new Schema({
title:{
type:String,
required:true,
},
description:{
type:String,
},
image:{
type:String,
// default:"https://www.istockphoto.com/photo/picturesque-morning-in-plitvice-national-park-colorful-spring-scene-of-green-forest-gm1093110112-293349147?utm_campaign=category_photos_bottom&utm_content=https%3A%2F%2Funsplash.com%2Fimages%2Fnature&utm_medium=affiliate&utm_source=unsplash&utm_term=Nature+Images%3A%3A%3A",
// set:(v)=>v===""?"https://www.istockphoto.com/photo/picturesque-morning-in-plitvice-national-park-colorful-spring-scene-of-green-forest-gm1093110112-293349147?utm_campaign=category_photos_bottom&utm_content=https%3A%2F%2Funsplash.com%2Fimages%2Fnature&utm_medium=affiliate&utm_source=unsplash&utm_term=Nature+Images%3A%3A%3A":v,
},
price:{
type:Number,
},
location:{
type:String,
},
country:{
type:String,
},
});
const Listing =mongoose.model("Listing",listingSchema);
module.exports=Listing;
所以,我在index.js 中的详细错误:
ValidationError: Listing validation failed: image: Cast to string failed for value "{ url: 'https://unsplash.com/photos/hallway-of-building-LfqmND-hym8' }" (type Object) at path "image"`
` at parallelLimit (C:\node_project\node_modules\mongoose\lib\helpers\parallelLimit.js:23:5) {
stringValue: `"{ url: 'https://unsplash.com/photos/hallway-of-building-LfqmND-hym8' }"`,
messageFormat: undefined,
kind: 'string',
value: {
url: 'https://unsplash.com/photos/hallway-of-building-LfqmND-hym8'
},
path: 'image',
reason: null,
valueType: 'Object'
}
},
_message: 'Listing validation failed
您的架构将字段图像定义为字符串
image:{ type:String }
这就是验证字段的原因,因为在这里您将使用图像URL,因此架构将是imageURL。所有其他代码都很好。只需在架构中将其定义为“imageURL”而不是“image”即可。 imageURL:{ type:String }
//listing.js
imageURL:{ //schema will be imageUR
type:String,
default:"https://www.istockphoto.com/photo/picturesque-morning-in-plitvice-national-park-colorful-spring-scene-of-green-forest-gm1093110112-293349147?utm_campaign=category_photos_bottom&utm_content=https%3A%2F%2Funsplash.com%2Fimages%2Fnature&utm_medium=affiliate&utm_source=unsplash&utm_term=Nature+Images%3A%3A%3A",
set:(v)=>v===""?"https://www.istockphoto.com/photo/picturesque-morning-in-plitvice-national-park-colorful-spring-scene-of-green-forest-gm1093110112-293349147?utm_campaign=category_photos_bottom&utm_content=https%3A%2F%2Funsplash.com%2Fimages%2Fnature&utm_medium=affiliate&utm_source=unsplash&utm_term=Nature+Images%3A%3A%3A":v,
},