Машинопись и пн goose: сохранение в базу данных - PullRequest
1 голос
/ 02 августа 2020

У меня есть следующее приложение для сохранения в репозиторий памяти. Я подключил локальный 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 голосов
/ 02 августа 2020

то, что вы здесь сделали, подключено к локальному MongoDB, теперь вам нужно будет войти на сайт MongoDB, т.е. здесь , после входа в систему первое, что нужно сделать, это создать пользователя для доступа к db / collections, нажмите Доступ к базе данных , добавьте пользователя, используйте режим аутентификации в качестве пароля для создания пользователя, затем вам нужно будет внести свой IP-адрес в белый список, чтобы сделать это, нажмите Доступ к сети и добавьте либо свой IP-адрес, либо 0.0.0.0/0 (что в основном означает, что все / любой IP-адрес, включая ваш, может получить доступ к этой БД), после этого вам нужно будет создать новую БД, внутри БД вам придется создавать коллекции, для этого нажмите Clusters , Collection и создайте свою базу данных оттуда, наконец, чтобы завершить все, что вам нужно будет подключиться к DB, для этого нажмите Clusters , Подключить и выбрать либо Подключить приложение , либо Подключиться с помощью MongoDB Compass вариант, это даст вам nnection URL выглядит так: -

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

для компаса MongoDB опция

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

и, как это для Подключить приложение , здесь вам нужно будет изменить <username>:<password> с именем пользователя и паролем, используемыми для создания пользователя в Доступ к базе данных также измените <dbname> с вашим фактическим именем БД. В вашем случае, когда у вас есть mongoose.connect('mongodb://localhost:27017/CompetitionEvent'), вам необходимо заменить его URL-адресом подключения.

Ссылки: -

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...