我正在嘗試獲取并顯示“專案”集合中的所有條目,這些條目包含用戶集合中的用戶/用戶 ID 并由其列出。
item_controller.js:
const Item = require('../models/item_schema')
const getUserItems = (req, res) => {
Item.findById(req.params.userID).populate('categoryID').populate('qualityID').populate('userID')
.then((data) => {
if (data) {
res.status(200).json(data)
} else {
res.status(404).json(`Item from user id ${req.params.userID} not found.`)
}
})
}
module.exports = {
getUserItems
}
item_schema.js:
const { Schema, model} = require('mongoose')
const itemSchema = new Schema({
title: {
type: String,
required: [true, 'Title field is required.']
},
description: {
type: String,
required: [true, 'Description field is required.']
},
userID: {
type: Schema.Types.ObjectId,
ref: "User",
required: [true, 'User field is required']
},
categoryID: {
type: Schema.Types.ObjectId,
ref: "Category",
required: [true, 'Category field is required']
},
qualityID: {
type: Schema.Types.ObjectId,
ref: "Quality",
required: [true, 'Quality field is required']
},
price: {
type: Number
},
claimed:{
type: Boolean
}
}, {
timestamps: true
})
module.exports = model('Item', itemSchema)
server.js:
const express = require('express')
const cors = require('cors')
const jwt = require('jsonwebtoken')
require('dotenv').config()
require('./db')()
const { getUserItems } = require('./controllers/item_controller')
const port = process.env.PORT || 3000
const app = express()
app.use(cors())
app.use(express.json())
app.use((req, res, next) => {
if (req.headers && req.headers.authorization && req.headers.authorization.split(' ')[0] === 'Bearer') {
jwt.verify(req.headers.authorization.split(' ')[1], 'zero_waste_app', (err, decode) => {
if (err) req.user = undefined
req.use r = decode
next()
})
} else {
req.user = undefined
next()
}
})
// Item Routes
app.get('items/user/:userID', getUserItems)
app.listen(port, () => {
console.log(`Example app listening on port ${port}`)
})
我認為我的問題出在 item_controller 中,我嘗試了幾種不同的方法,例如Item.find({userID: userID})甚至硬編碼 userID in Item.find({userID: '620a6299299db14c46a1eb9f'}),但我無法讓它作業。有誰知道我做錯了什么以及如何解決?
另外,如果有更多資訊或代碼可以提供幫助,請告訴我。
uj5u.com熱心網友回復:
所以,首先,如果你不指定主鍵,貓鼬會自動_id在你的集合中生成一個欄位。并且此屬性是在集合的“...ById”方法中使用的屬性,例如findById,findByIdAndUpdate等。
好的,它如何解決您的問題?您正在使用Item.findById使用 a 值的方法userID,但您_id的方法完全不同。您必須使用.find傳遞userID屬性的方法,也不需要鏈接populate方法,只需一個方法呼叫即可填充許多欄位。
嘗試將您的控制器更改為:
const {userID} = req.params;
Item
.find({userID})
.populate('categoryID qualityID userID')
.then((data) => {
if (data) {
return res.status(200).json(data)
}
return res.status(404).json(`Item from user id ${req.params.userID} not found.`)
})
uj5u.com熱心網友回復:
我想到了。
const getUserItems = (req, res) => {
Item.find({userID: req.params.userID}).populate('categoryID').populate('qualityID')
.then((data) => {
if (data) {
res.status(200).json(data)
} else {
res.status(404).json(`Item from user id ${req.params.userID} not found.`)
}
})
}
我的路線一開始也缺少一個“/”,所以:
app.get('/items/user/:userID', getUserItems)
而不是我以前擁有的:
app.get('items/user/:userID', getUserItems)
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/439671.html
標籤:javascript 节点.js mongodb 表示 猫鼬
