如何处理:错误:图像:值转换为字符串失败; NodeJS

问题描述 投票:0回答:1

所以我正在研究将服务器连接到数据库的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
node.js mongodb express mongoose
1个回答
0
投票

您的架构将字段图像定义为字符串

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,
    },
© www.soinside.com 2019 - 2024. All rights reserved.