簡體   English   中英

在 NodeJS 和 mongoose 中更新文檔

[英]Update document in NodeJS and 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', async (req: any, res: any) => {
  const data = await new CompetitionModel(req.body).save()
  res.json(data)
})

app.put('/update/:id', async (req: any, res: any) => {
  const subs = await CompetitionModel.findOneAndUpdate(
    { id: req.params },
    { subscriptions: req.body },
  )
  res.send(subs)
})

這是我的蒙戈文件:

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:對於 model“CompetitionModel”的路徑“id”處的值“{id:'whatever'}”轉換為字符串失敗

我不確定到 go 的哪種方式可以使這條路線正常工作,有什么想法嗎?

在你app.put()路由中,你在代碼中犯了一個錯誤,當你只需要傳遞必需的參數id時,你傳遞了整個req.params object :

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 },
)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM