【问题标题】:Express Get route return error 500:"Cast to ObjectId failed for value"Express Get 路由返回错误 500:"Cast to ObjectId failed for value"
【发布时间】:2022-02-22 23:26:04
【问题描述】:

我需要一些帮助,我尝试将一些数据播种到 mongoDB Atlas,所以我为此编写了一个 api(感谢 Basir^^):

productRouter.get('/seed', expressAsyncHandler(async (req, res) => {
console.log('foo');
/*     await Product.remove({})*/
const seller = await User.findOne({
    isSeller: true
})

if (seller) {
    const products = data.products.map((product) => ({
        ...product,
        seller: seller._id,
    }));
    const createdProducts = await Product.insertMany(data.products);
    res.send({
        createdProducts
    });
} else {
    res.status(500).send({
        message: 'No seller found. first run /api/users/seed'
    });
}}));

问题,当我在浏览器中输入我的 api 路由时,他返回:

"Cast to ObjectId failed for value "seed" at path 
"_id" for model "Product""

其他路线完美,我真的很困惑......

这是productSchema:

import mongoose from 'mongoose'
import {
    reviewSchema
} from './reviewSchema.js'

const productSchema = new mongoose.Schema({
    name: {
        type: String,
        required: true,
        unique: true
    },
    seller: {
        type: mongoose.Schema.Types.ObjectId,
        ref: 'User',
    },
    image: {
        type: String,
        required: true,
    },
    brand: {
        type: String,
        required: true,
    },
    category: {
        type: String,
        required: true,
    },
    description: {
        type: String,
        required: true,

    },
    price: {
        type: Number,
        required: true,

    },
    countInStock: {
        type: Number,
        required: true,
    },
    rating: {
        type: Number,
        required: true,
    },
    numReviews: {
        type: Number,
        required: true,
    },
    reviews: [reviewSchema]
}, {
    timestamps: true
})

export const Product = mongoose.model("Product", 
productSchema)

这是我的 server.js:

import {config} from 'dotenv'
import express from 'express'
import mongoose from 'mongoose'
import path from 'path'
import{productRouter}
from'./routers/productRouter.js';
import {userRouter} from './routers/userRouter.js'
import {orderRouter} from './routers/orderRouter.js'
import {uploadRouter} from 
'./routers/uploadRouter.js';

const dotenv = config();

const app = express();
app.use(express.json());
app.use(express.urlencoded({
extended: true
}));

mongoose.connect(process.env.MONGODB_URL || 
'mongodb://localhost/ecommercelab', {
useNewUrlParser: true,
useUnifiedTopology: true,
useCreateIndex: true
});

app.use('/api/uploads', uploadRouter);

app.use('/api/users', userRouter);

app.use('/api/products', productRouter);

app.use('/api/orders', orderRouter);

app.get('/api/config/paypal', (req, res) => {
res.send(process.env.PAYPAL_CLIENT_ID || '');
});

app.get('/api/config/google', (req, res) => {
res.send(process.env.GOOGLE_API_KEY || '');
});

const __dirname = path.resolve()
app.use('/uploads', 
express.static(path.join(__dirname, 'uploads')));

app.use(express.static(path.join(__dirname, 
  '/frontend/build')));

app.get('*', (req, res) => {
  res.sendFile(path.join(__dirname, 
'/frontend/build/index.html'));
});

app.use((err, req, res, next) => {
res.status(500).send({
    message: err.message
 });
});

const port = process.env.PORT || 5000;
app.listen(port, () => {
  console.log(`Serve at http://localhost:${port}`);
});

它适用于电子商务应用程序。

感谢您的关注,我继续测试;)

【问题讨论】:

    标签: node.js mongodb express


    【解决方案1】:

    好的,经过三个小时的尝试,我终于解决了这个问题,我发现了光^^。 只是,我的路线(/seed)位于带有/:id的路线后面,似乎它造成了一种冲突,我在文件productRouter中将她移到了更高的位置,现在可以了。 :)

    【讨论】:

      【解决方案2】:

      我的猜测是您应该将const createdProducts = await Product.insertMany(data.products); 替换为const createdProducts = await Product.insertMany(products);。你是参考data.products,但在你使用const products = data.products.map( ...之前还有几行

      编辑:这只会解决您的传入问题,即您的数据库中的seller id 缺少产品条目:D

      【讨论】:

      • 是的,在我阅读了您的回复后,我检查了我的代码是否毫无意义,非常感谢,您让我远离了一个令人震惊的错误 :)
      猜你喜欢
      • 2017-04-04
      • 2017-08-14
      • 2017-02-06
      • 1970-01-01
      • 2017-12-21
      • 2013-02-03
      • 2021-04-20
      • 2020-12-10
      相关资源
      最近更新 更多