Автор оригинала: Shane Wignall.
Отдых (репрезентативный государственный перевод) Это архитектурный стиль для разработки веб-сервисов, которые выступают за использование типов HTTP-запросов, поскольку они были первоначально предназначены. Получить Запросы для поиска, Поставить Запросы для мутации, Пост Запросы для создания, а Удалить Запросы на делеции. Остальные также требуют, чтобы клиенту не нужно было ничего знать о структуре API, чтобы она была использована.
В этой статье мы посмотрим на процесс создания современной бэкэнда для применения к примечанию в Node.js, которые придерживаются редких принципов.
Начните с выполнения следующей команды в корневом каталоге проекта для инициализации Package.json:
npm init
Затем установите необходимые зависимости:
npm i --save express mongoose
npm i --save-dev babel-cli babel-preset-env nodemon
Краткое объяснение для каждого из этих модулей:
- Экспресс это то, что мы будем использовать для загрузки веб-сервера
- Мангуст Взаимодействует с базой данных MongoDB
- Бабел Компиляция ES6 + JavaScript в читаемый браузер формат
- Номемон автоматически перезапускает приложение при обнаружении изменений файлов
Варить
Создайте новый файл, называемый .babelrc и заполните его следующим образом:
{ "presets": ["env"] }
Это говорит Bable для использования “env” Плагин, который специально для транспилирования Code ES6.
После этого отправляйтесь на Package.json и настроить «Сценарии» Раздел следующим образом:
{ ... "scripts": { "start": "nodemon server.js --exec babel-node --presets env", "release": "npm run clean && npm run build && npm run serve", "clean": "rm -rf dist && mkdir dist", "build": "babel . -s -D -d dist --presets env --ignore node_modules", "serve": "node dist/server.js" }, ... }
С этой конфигурацией вы можете выполнить NPM начать во время активного развития, чтобы включить реализацию Live-Reloading, а выпуск NPM, чтобы развернуть приложение для производства.
выражать
Теперь, когда приложение настроено для использования ES6, мы перейдем к настройке сервера.
Начните с настройки Создание структуры каталога для наших файлов проекта:
notes-app/ ├── controllers/ │ └── notebookController.js │ └── notebookModel.js ├── models/ ├── routes/ │ └── index.js ├── app.js ├── server.js └── package.json
Сервер
Теперь, что у вас создал структуру Barebones из приложения, отправляйтесь на файл Server.js и заполните его этим базовым кодом сервера:
import app from './app'; const port = process.env.PORT || '3000'; app.listen(port); console.log(`Listening on port ${port}`);
Модели
Нам нужно будет сообщить серверу, какая информация будет содержать нашу заметку. Для этого мы настроим Схема базы данных Как следующее в NotookeModel.js:
import mongoose, { Schema } from 'mongoose'; /** * Create database scheme for notes */ const NoteScheme = new Schema({ title: { type: String, required: "What is the note's title?" }, text: { type: String, required: "What is the note?" }, date: { type: Date, default: new Date } }); export default mongoose.model('Note', NoteScheme);
Маршруты
Теперь, когда у нас установлена наша модель примечаний, мы перейдем на наши маршруты. Каждый маршрут будет определять, какой метод выполняется, когда они вызываются клиентом, в зависимости от того, какой метод HTTP указывается.
В нашем приложении у нас будут маршруты, которые выполняют следующее:
- Получить все ноты
- Получить конкретную ноту
- Создать примечание
- Обновите существующую записку
- Удалить примечание
В файле index.js мы определим, как маршруты, как так:
import notebook from '../controllers/notebookController'; export default (app) => { app.route('/notes') .get(notebook.getAllNotes) .post(notebook.createNote); app.route('/notes/:noteId') .get(notebook.getNote) .put(notebook.updateNote) .delete(notebook.deleteNote); };
Контроллеры
С нашими маршрутами определены, мы можем двигаться дальше, чтобы написать функции, которые каждый маршрут будет вызывать в NotebookController.js:
import mongoose from 'mongoose'; import note from '../models/notebookModel.js'; exports.getNote = (req, res) => { note.findById(req.params.noteId, (err, note) => { if (err) { res.send(err); } res.json(note); }); }; exports.getAllNotes = (req, res) => { note.find({}, (err, notes) => { if (err) { res.send(err); } res.json(notes); }); }; exports.createNote = (req, res) => { const newNote = new note(req.body); newNote.save((err, note) => { if (err) { res.send(err); } res.json(note); }); }; exports.updateNote = (req, res) => { note.findOneAndUpdate({ _id: req.params.noteId }, req.body, (err, note) => { if (err) { res.send(err); } res.json(note); }); }; exports.deleteNote = (req, res) => { note.remove({ _id: req.params.noteId }, (err) => { if (err) { res.send(err); } res.json({ message: `note ${req.params.noteId} successfully deleted` }); }); };
Приложение
Чтобы связать все вместе, мы напишем наш файл App.js, который сообщает серверу, где маршруты, а что промежуточные программы использовать. Это функции, которые имеют доступ к объектам запроса и ответа, поэтому их можно использовать для обработки ошибок и для данных запроса.
Наш файл app.js должен выглядеть что-то подобное:
import express from 'express'; import mongoose from 'mongoose'; import bodyParser from 'body-parser'; import routes from './routes/index.js'; const app = express(); /** * Connect to the database */ mongoose.connect('mongodb://localhost'); /** * Middleware */ app.use(bodyParser.urlencoded({ extended: true })); app.use(bodyParser.json()); // catch 400 app.use((err, req, res, next) => { console.log(err.stack); res.status(400).send(`Error: ${res.originUrl} not found`); next(); }); // catch 500 app.use((err, req, res, next) => { console.log(err.stack) res.status(500).send(`Error: ${err}`); next(); }); /** * Register the routes */ routes(app); export default app;
Применение
Наше приложение теперь завершено, и мы можем двигаться дальше, чтобы сделать вызовы отдыха для создания, обновления, приема и удаления нот.
Звонки отдыха могут быть сделаны с рядом программ, но я лично предлагаю Бессонница Отказ Простое использование руководства можно найти на их «Начало работы» страница.
Во-первых, чтобы получить список всех заметок в базе данных, выполните запрос на получение на localhost: 3000/Примечания :
Ответ должен быть пустым массивом, так как мы еще не создали никаких заметок.
Чтобы создать примечание, измените тип данных (раскрывающийся список непосредственно под полем URL), чтобы «URL-адрес формы», если он еще не будет, укажите «Название» и «Text» и выполните запрос на почту в том же URL:
Вы заметите, что возвращаются несколько элементов информации: параметр «_ID» – это уникальный номер, определенный, когда выполняется запрос постоимости, и мы можем использовать его, чтобы сообщить серверу, с чего мы хотим взаимодействовать.
Например, если мы хотим изменить текст этого примечания, мы можем выполнить запрос на поставку с идентификатором Note, добавленной к URL-адресу после указания нового текста:
По умолчанию метод Mongoose «FindoneAndupdate» возвращает неизменный объект, поэтому ответ все равно будет отображать старый текст ноты. Однако, если вы затем измените тип запроса на «Get», вы увидите обновленный объект:
Наконец, чтобы удалить примечание, изменить тип запроса на «Удалить» и выполнить запрос в соответствующий URL: