"err":邮递员中的"Cannot read property 'id' of undefined"
"err": "Cannot read property 'id' of undefined" in POSTMAN
我正在练习 API 并构建控制器功能以从数据库中创建、索引、显示、更新和删除小狗。为了检查我的所有路线是否正常工作,我使用的是 Postman,到目前为止效果很好,除了我的 show 功能。 show controller 函数应该通过 id 找到一只小狗。
我正在尝试发送具有特定 ID 的 GET 请求,我应该收到我之前创建的对象,但我却收到{"err": "Cannot read 属性 'id'未定义的"}
谁能帮帮我?为什么不接受 ID?
Server.js
import('./config/database.js')
app.use(logger('dev'))
app.use(express.json())
app.use(express.urlencoded({ extended: false }))
app.use(
express.static(
path.join(path.dirname(fileURLToPath(import.meta.url)), 'public')
)
)
// mounted routers
app.use('/api/puppies', puppiesRouter)
// catch 404 and forward to error handler
app.use(function (req, res, next) {
next(createError(404))
})
// error handler
app.use(function (err, req, res, next) {
// render the error page
res.status(err.status || 500).json({"err": err.message})
})
export {
app
}
database.js
import mongoose from 'mongoose'
const db = mongoose.connection
mongoose.connect(process.env.DATABASE_URL, {
useNewUrlParser: true,
// useCreateIndex: true,
useUnifiedTopology: true,
// useFindAndModify: false,
})`
db.on('connected', function() {
console.log(Connected to MongoDB ${db.name} at ${db.host}:${db.port})
})
路线:
import { Router } from 'express'
const router = Router()
import * as puppiesCtrl from '../controllers/puppies.js'
router.get('/', puppiesCtrl.index)
router.get('/:id', puppiesCtrl.show)
router.post('/', puppiesCtrl.create)
export {
router
}
控制器:
import { Puppy } from '../models/puppy.js'
export{
create,
index,
show,
}
function create(req, res){
Puppy.create(req.body)
.then(puppy => res.status(201).json(puppy))
.catch(err => {
console.log(err)
res.status(500).json(err)
})
}
function index(req, res){
Puppy.find({})
.then(puppies => res.status(200).json(puppies))
.catch(err => {
console.log(err)
res.status(500).json(err)
})
}
function show(req,res){
Puppy.findById(req.parmas.id)
.then(puppy => res.status(200).json(puppy))
.catch(err => {
console.log(err)
res.status(500).json(err)
})
}
因为 Puppy.findById()
的参数拼错了,你输入了 req.parmas.id
应该是 req.params.id
.
我正在练习 API 并构建控制器功能以从数据库中创建、索引、显示、更新和删除小狗。为了检查我的所有路线是否正常工作,我使用的是 Postman,到目前为止效果很好,除了我的 show 功能。 show controller 函数应该通过 id 找到一只小狗。
我正在尝试发送具有特定 ID 的 GET 请求,我应该收到我之前创建的对象,但我却收到{"err": "Cannot read 属性 'id'未定义的"}
谁能帮帮我?为什么不接受 ID?
Server.js
import('./config/database.js')
app.use(logger('dev'))
app.use(express.json())
app.use(express.urlencoded({ extended: false }))
app.use(
express.static(
path.join(path.dirname(fileURLToPath(import.meta.url)), 'public')
)
)
// mounted routers
app.use('/api/puppies', puppiesRouter)
// catch 404 and forward to error handler
app.use(function (req, res, next) {
next(createError(404))
})
// error handler
app.use(function (err, req, res, next) {
// render the error page
res.status(err.status || 500).json({"err": err.message})
})
export {
app
}
database.js
import mongoose from 'mongoose'
const db = mongoose.connection
mongoose.connect(process.env.DATABASE_URL, {
useNewUrlParser: true,
// useCreateIndex: true,
useUnifiedTopology: true,
// useFindAndModify: false,
})`
db.on('connected', function() {
console.log(Connected to MongoDB ${db.name} at ${db.host}:${db.port})
})
路线:
import { Router } from 'express'
const router = Router()
import * as puppiesCtrl from '../controllers/puppies.js'
router.get('/', puppiesCtrl.index)
router.get('/:id', puppiesCtrl.show)
router.post('/', puppiesCtrl.create)
export {
router
}
控制器:
import { Puppy } from '../models/puppy.js'
export{
create,
index,
show,
}
function create(req, res){
Puppy.create(req.body)
.then(puppy => res.status(201).json(puppy))
.catch(err => {
console.log(err)
res.status(500).json(err)
})
}
function index(req, res){
Puppy.find({})
.then(puppies => res.status(200).json(puppies))
.catch(err => {
console.log(err)
res.status(500).json(err)
})
}
function show(req,res){
Puppy.findById(req.parmas.id)
.then(puppy => res.status(200).json(puppy))
.catch(err => {
console.log(err)
res.status(500).json(err)
})
}
因为 Puppy.findById()
的参数拼错了,你输入了 req.parmas.id
应该是 req.params.id
.