打字稿和猫鼬:保存到数据库

时间:2020-08-02 10:18:38

标签: node.js mongodb typescript mongoose

我将以下应用保存到内存回购中。我连接了本地mongodb,但是将发布的数据保存到mongodb时遇到了问题。 当应用程序保存到内存时,它可以正常工作,我可以使用curl来显示保存在其中的不同事件的数组。我现在想将其保存到数据库中,这样我就可以处理保存的数据,而在此上找不到任何清晰的教程。 有人可以建议应该怎么做吗?
Mongodb模式:

import { mongoose } from '././http'

const CompetitionSchema = new Schema({
  id: String,
  place: String,
  time: String,
  subscriptions: [],
  date: new Date(),
  cost: {
    currency: String,
    amount: Number,
  },
})

export const CompetitionModel = mongoose.model(
  'CompetitionModel',
  CompetitionSchema,
)

export default CompetitionSchema

http:

export const mongoose = require('mongoose')

mongoose.connect('mongodb://localhost:27017/CompetitionEvent')
const db = mongoose.connection
db.on('error', console.error.bind(console, 'An error has occured: '))
db.once('open', function () {
  console.log('Connected to Mongodb')
})

const express = require('express')
const app = express()
const bodyParser = require('body-parser')

app.use(bodyParser.json())
app.get('/events', (_req: any, res: any) => {
  res.send(eventApplication.getAll())
})

app.post('/event', async (req: any, res: any) => {
  await eventApplication.createAnEvent(req.body)
  res.json({
    success: true,
  })
})

app.listen(8000)

在内存和mongodb存储库中


export interface EventRepositoryInterface {
  // will require ansyc call will have return promise of all below - refactor needed
  save: (event: CompetitionEvent) => void
  getById: (id: string) => CompetitionEvent | undefined
  getAll: () => CompetitionEvent[]
}

export class InMemoryEventRepository implements EventRepositoryInterface {
  constructor(private events: CompetitionEvent[] = []) {}

  public save = (event: CompetitionEvent) =>
    (this.events = [...this.events, event])
  public getById = (id: string) => this.events.find((e) => e.id === id)
  public getAll = () => this.events
}

export class MongoCompetitionEventRepository
  implements EventRepositoryInterface {
  constructor(private events: CompetitionEvent[] = []) {}

  //here event should go to DB and NOT in the array memory
  public save = (event: CompetitionEvent) =>
    (this.events = [...this.events, event])
  public getById = (id: string) => this.events.find((e) => e.id === id)
  public getAll = () => this.events
}

如果有什么遗漏,请告诉我,我将编辑帖子

1 个答案:

答案 0 :(得分:0)

您在这里所做的工作已连接到本地MongoDB,现在您必须登录MongoDB网站,即here,在登录后要做的第一件事就是创建一个用户来访问db /集合,单击数据库访问,添加用户,使用身份验证模式作为密码来创建用户,接下来,您必须将IP地址列入白名单,然后点击网络访问并添加您的IP地址或0.0.0.0/0(这基本上意味着包括您在内的所有IP地址都可以访问该数据库),之后您将必须创建一个新的数据库,在该数据库内部您必须创建集合,为此,请单击集群集合并从那里创建数据库,最后要完成它,您需要连接到数据库,为此单击< strong>集群,连接,然后选择连接应用程序使用MongoDB Compass连接选项,这将为您提供连接在网址上看起来像这样:-


mongodb+srv://<username>:<password>@cluster0-gd3lq.mongodb.net/test


用于 MongoDB指南针选项


mongodb+srv://<username>:<password>@cluster0-gd3lq.mongodb.net/<dbname>?retryWrites=true&w=majority


,并在此处像这样用于 Connect Application 选项,您将必须更改<username>:<password>以及用于在 Database Access 中创建用户的用户名和密码并用您的实际数据库名称更改<dbname>。 如果您拥有mongoose.connect('mongodb://localhost:27017/CompetitionEvent'),则必须用连接URL替换它。

参考文献:-