Рубрики
Без рубрики

Делать спокойную вершину с Node.js

Остальное (репрезентативный государственный перевод) – это архитектурный стиль для разработки веб-сервисов, которые выступают за использование типов HTTP-запросов, поскольку они были первоначально предназначены. Получить запросы для …

Автор оригинала: 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: