Статьи по NodeJs

Как связать mongodb и nodejs

Если мы собираемся использовать веб-сервисы, нам нужно будет подключить mongodb и nodejs для хранения информации.

Mongoose для nodejs

Давайте установим следующее:

npm i mongoose –save

Это будет наш коннектор для mongodb, он имеет достаточно функций для выполнения всего необходимого в mongo.

Давайте создадим новый документ под названием mongooseeconnections.js

var mongoose = require('mongoose'); mongoose.connect('mongodb://localhost:27017/ubikt', { useCreateIndex: true, useFindAndModify: false, useNewUrlParser: true }).then(db => console.log('Успешное подключение')) .catch(err => console.log('Ошибка: ', err))
Code language: JavaScript (javascript)

Если мы запустим этот код, то увидим, что он подключается к нашей базе данных и сообщает нам об успешном подключении, нам не нужно ничего создавать, потому что он делает это автоматически.

Модели для работы с mongodb и nodejs

Для каждой коллекции, которую мы имеем в нашем mongo, мы должны создать модель, это помогает нам всегда иметь одну и ту же структуру во всем нашем коде. Так легче заполнять данные или проводить валидацию.

const mongoose = require('mongoose'); const { Schema } = mongoose; const loginInfo = new Schema({ userId: { type: String, unique: true, required: true }, password: { type: String, required: true }, date: { type: Date, default: Date.now }, access: { type: Boolean, default: false }, code: { type: String, required: true } }); module.exports = mongoose.model('login', loginInfo);
Code language: JavaScript (javascript)

Как мы видим, простым способом мы указываем, какие значения являются обязательными, а какие нет. Если мы заполним их неправильно, то будет выдана ошибка о том, что определенное значение является обязательным.

Использование моделей

const express = require('express'); const router = express.Router(); const modelLogin = require('../model/Login'); 'use strict'; router.post('/signup', async(req, res) => { var { user, pass } = req.body; // логика входа в систему clave = 2212; let xlogin = new modelLogin({ user: user, pass: pass, code: clave }) await xlogin.save((error, signup) => { if (error) { if (error.code == 11000) { responseb.error = true; responseb.code = 401; responseb.message = 'Этот пользователь уже существует'; res.status(401).send({ responseb }); } else { responseb.error = true; responseb.code = 304; responseb.message = error.code; res.status(304).send({ responseb }); } } else { responseb.error = true; responseb.code = 200; responseb.message = { id: signup._id, tk: token }; res.send({ responseb }); }
Code language: JavaScript (javascript)

Если мы установим console.log в xlogin, мы увидим, что он выдает нам структуру mongodb, но мы еще не сохранили ее. Для этого мы должны использовать метод .save() и await для ожидания сохранения информации.

Всякий раз, когда мы собираемся выполнить ввод, мы можем сделать это таким образом: мы заполняем нашу модель, а затем вызываем .save().

Другой пример – создание шаблона для профиля пользователя:

usri = new userinfo({ email: req.body.email, name: req.body.name, lastName: req.body.lastName, lastName2: req.body.lastName2, idLocation: [], idFav: [] }) usri.save((error, tok) => { if (error) { responseb.error = false; responseb.code = 400; responseb.message = error; res.status(400).send(responseb) } else { responseb.error = false; responseb.code = 200; responseb.message = tok._id; res.status(201).send(responseb) } })
Code language: JavaScript (javascript)

Поиск в mongodb с помощью mongoosee (fing и fingOne)

Для получения информации мы будем использовать следующее. Мы будем использовать нашу модель, например modelLogin, поскольку у нас есть структура и вызов коллекции.

Если мы обратимся к документации mongo, то для получения файла мы используем метод fing().

Для mongoosee мы будем использовать тот же метод fing следующим образом:

router.post('/login', (req, res) => { // логика входа в систему modelLogin.find({ user: req.body.user, pass: req.body.pass }, (error, sok) => { if (error) { responseb.error = true; responseb.code = 304; responseb.message = error; res.status(304).send({ responseb }); } else { if (sok.length == 0) { responseb.error = true; responseb.code = 404; responseb.message = 'запись не найдена, проверьте правильность пароля или правильность написания электронной почты.'; res.status(404).send({ responseb }); } else { if (sok[0].access) { responseb.error = false; responseb.code = 200; responseb.message = token; res.send({ responseb }) } else { responseb.error = true; responseb.code = 403; responseb.message = 'вы не подтвердили свою почту, проверьте свой почтовый ящик'; res.status(403).send({ responseb }) } } } }); });
Code language: PHP (php)

Если мы хотим использовать более конкретный поиск, мы можем использовать findOne, он будет искать только одно значение по сравнению с find, который ищет все совпадающие значения.

Update и delete с помощью mongoosee и node js

Еще один метод, который мы будем часто использовать, – это метод update и delete для обновления и удаления записи.

Для удаления мы будем использовать метод findOneAndDelete:

await modelLogin.findOneAndDelete({ _id: req.params.id }, (error, modify) => { if (error) { responseb.message = error; responseb.error = true; responseb.code = 400; res.status(400).send(responseb); } else { responseb.message = error; responseb.error = false; responseb.code = 201; res.status(201).send(responseb); } });
Code language: JavaScript (javascript)

findOneAndXXXXXXXX, первый параметр – это конкретный поиск (например, where) сразу, этот результат не возвращает их в объект и является тем, который мы собираемся изменить или удалить.

Если мы хотим обновить, мы используем следующий метод findOneAndUpdate, который очень похож на предыдущий метод или мы можем использовать это:

await userprop.findOne({ _id: req.params.id }, (error, modify) => { if (error) { responseb.message = error; responseb.error = true; responseb.code = 400; res.status(400).send(responseb); } else { if (req.body.properties.user != undefined) { modify.properties.user = req.body.properties.user; } console.log(modify) modify.save((error, tok) => { if (error) { responseb.message = error; responseb.error = true; responseb.code = 400; res.status(500).send(responseb); } else { responseb.message = 'Ok'; responseb.error = true; responseb.code = 204; res.status(204).send(responseb); } }) } });
Code language: JavaScript (javascript)

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *