Если мы собираемся использовать веб-сервисы, нам нужно будет подключить 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)