如何解决更新NodeJS和mongoose中的文档
我有一个带有Typescript和mongoose的nodeJS应用程序,我正在尝试通过向其添加订阅来更新CompetitionEvent文档。 这是我的http文件:
const express = require('express')
import * as bodyParser from 'body-parser'
// import { eventApplication } from './compositionRoot'
import { CompetitionModel } from './mongo'
export const app = express()
app.use(bodyParser.json())
// WORKS - find all events
app.get('/events',async (_req: any,res: any) => {
const comp = await CompetitionModel.find()
res.send(comp)
})
// WOKRS - find just one event
app.get('/events/:id',async (req: any,res: any) => {
const searchedComp = await CompetitionModel.find(req.params)
res.send(searchedComp)
})
// WORKS - posts a new comp event
app.post('/new-comp',res: any) => {
const data = await new CompetitionModel(req.body).save()
res.json(data)
})
app.put('/update/:id',res: any) => {
const subs = await CompetitionModel.findOneAndUpdate(
{ id: req.params },{ subscriptions: req.body },)
res.send(subs)
})
这是我的mongo文件:
const mongoose = require('mongoose')
mongoose.connect('mongodb://localhost:27017/CompetitionEvent')
export const CompetitionSchema = new mongoose.Schema({
id: String,compName: String,place: String,time: String,subscriptions: [],date: Date,cost: {
currency: String,amount: Number,},})
export const CompetitionModel = mongoose.model(
'CompetitionModel',CompetitionSchema,)
export const connection = () =>
new Promise((resolve,reject) => {
mongoose.connection.once('open',() => {
resolve()
})
mongoose.connection.once('error',() => {
reject('something went wrong')
})
})
我不确定是否也应该为订阅创建一个模式,因为订阅属于CompetitionSchema。现在,当我尝试使用此/ update /:id路由时出现以下错误:
(节点:9022)UnhandledPromiseRejectionWarning:CastError:在模型“ CompetitionModel”的路径“ id”处,对值“ {{id:'whatever'}”的字符串转换为字符串失败
我不确定走这条路线的路要走,有什么想法吗?
解决方法
在您的app.put()
路线中,您在代码中犯了一个错误,当您只需要传递必需的参数req.params
时,您将传递整个id
对象:
const subs = await CompetitionModel.findOneAndUpdate(
{ id: req.params },// <------ You are searching for req.params
{ subscriptions: req.body },)
改为解决此问题:
const subs = await CompetitionModel.findOneAndUpdate(
{ id: req.params.id },// <------ req.params.id is what you should pass.
{ subscriptions: req.body },)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。