【发布时间】: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}`);
});
它适用于电子商务应用程序。
感谢您的关注,我继续测试;)
【问题讨论】: