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

Построить API Node.js менее чем за 30 минут

Scott Domes Build aDe.js API в возрасте до 30 минутnody.js может быть пугающим для начинающих. Но его гибкая структура и отсутствие строгих руководящих принципов кажутся более сложными, чем оно. Этот учебник является быстрым и простым руководством по Node.js, экспресс-структуру и

Автор оригинала: FreeCodeCamp Community Member.

по куполам Скотта

Node.js может быть пугающим для начинающих. Но его гибкая структура и отсутствие строгих руководящих принципов кажутся более сложными, чем оно.

В этом руководстве является быстрым и простым руководством по Node.js, экспресс-структуру и MongoDB, ориентируясь на фундаментальные маршруты отдыха и базовым взаимодействием базы данных. Вы построете простой котел API, который затем можно использовать в качестве основы для любого приложения.

Для кого это учебное пособие для : У вас должно быть базовое понимание о отдыхах API и операций CRUD, плюс базовые знания JavaScript. Я использую ES6 (в основном функции Fat-arrow), но ничего не сложного.

Для этого учебника вы создадите скелет заднего конца для применения применения – подумайте Google сохраняет Отказ Вы хотите иметь возможность выполнять все четыре действия Crud на ваших заметках: создайте, читать, обновлять и удалять.

Установка

Если у вас нет установленного узла, Смотрите здесь Отказ

В новом каталоге запустите NPM init и следуйте вместе с подсказками, давая вашему приложению имя «заметного» (или что-то еще, что вы можете).

npm init

Как только это сделано, вы должны иметь Package.json Готов к работе в вашем каталоге. Это означает, что вы можете начать устанавливать зависимости, которые вам нужно для вашего проекта.

Вы собираетесь использовать Express в качестве своей рамки, MongoDB в качестве базы данных и пакет под названием Body-Parser, чтобы помочь справиться с запросами JSON.

npm install --save express mongodb@2.2.16 body-parser

Я также рекомендую установить Nodemon в качестве зависимости разработки. Это простой небольшой пакет, который автоматически перезапускает ваш сервер при изменении файлов.

Если вы запустите:

npm install --save-dev nodemon

Затем вы можете добавить следующий скрипт на Package.json :

// package.json
  "scripts": {    "dev": "nodemon server.js"  },

Ваш полный Package.json должен выглядеть так:

// package.json
{  "name": "notable",  "version": "1.0.0",  "description": "",  "main": "server.js",  "scripts": {    "dev": "nodemon server.js"  },  "author": "",  "license": "ISC",  "dependencies": {    "body-parser": "^1.15.2",    "express": "^4.14.0",    "mongodb": "^2.2.16"  },  "devDependencies": {    "nodemon": "^1.11.0"  }}

Теперь вы можете создать свой server.js Файл И начните строить вашу API.

Наш сервер

Давайте начнем, требуя всех ваших зависимостей в server.js.

// server.js
const express        = require('express');const MongoClient    = require('mongodb').MongoClient;const bodyParser     = require('body-parser');
const app            = express();

Вы собираетесь использовать MongoClient, чтобы взаимодействовать с вашей базой данных. Обратите внимание, что вы также инициализируете свое приложение в качестве экземпляра Express, ваша структура.

Последнее, что вам нужно сделать, чтобы заставить свой сервер вверх и запустить, это сообщить вашему приложению начать слушать Для HTTP-запросов.

Вы можете указать порт и начать прослушивание так:

// server.js
const port = 8000;
app.listen(port, () => {  console.log('We are live on ' + port);});

Теперь, если вы запустите NPM запустить dev (или Node Server.js Если вы не установили Nodemon), вы должны увидеть «Мы живем по порту 8000» в терминале.

Ваш сервер живет. Но это не так много. Или что-нибудь, действительно.

Давайте исправить это.

Крудди маршруты

Для этого примера вы хотите построить 4 маршрута; Чтобы создать ноту, чтобы прочитать ваши заметки, чтобы обновить примечание и удалить примечание.

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

Требуют тестирование вашего API, вам нужно имитировать запросы на сободу клиента. Для этого вы будете использовать отличное приложение под названием Почтальон Отказ Это позволяет сделать простые HTTP-запросы с пользовательскими органами и параметрами.

Установите почтальон и давайте начнем настроить свои маршруты.

Супер организован

Большинство учебных пособий Node.js (и многие настоящие приложения) поставили все свои маршруты в один большой Маршруты.js файл. Это делает меня немного неудобным. Напротив, разделение ваших файлов в отдельные папки приводит к хорошей читабельности и делает большие приложения более управляемыми.

У вас нет большого приложения, но давайте сделаем это правильно. Сделайте следующие каталоги: a приложение Папка с папкой маршрутов внутри него, с index.js и а note_routes.js файл внутри него.

Другими словами: root> App> маршруты> index.js и note_routes.js.

mkdir appcd appmkdir routescd routestouch index.jstouch note_routes.js

Эти каталоги могут показаться сверху для вашего простого небольшого приложения, но всегда приятно начать с лучших практик.

Ваш первый маршрут

Начнем с C в Crud- создайте. Как бы вы создали записку?

Ну, прежде чем делать это, вы должны построить немного больше инфраструктуры. В Express маршруты обернуты в функцию, которая принимает экземпляр экспресс и база данных в качестве аргументов.

Как это:

// routes/note_routes.js
module.exports = function(app, db) {
};

Затем вы можете экспортировать эту функцию через ваш index.js :

// routes/index.js
const noteRoutes = require('./note_routes');
module.exports = function(app, db) {  noteRoutes(app, db);  // Other route groups could go here, in the future};

Затем импортируйте его для использования в server.js:

// server.js
const express        = require('express');const MongoClient    = require('mongodb').MongoClient;const bodyParser     = require('body-parser');
const app            = express();
const port = 8000;
require('./app/routes')(app, {});app.listen(port, () => {  console.log('We are live on ' + port);});

Обратите внимание, что поскольку у вас нет базы данных, но не установлена, вы просто проходите в пустой объекте.

Хорошо, сейчас Вы можете сделать ваш маршрут.

Синтаксис прост:

// note_routes.js
module.exports = function(app, db) {  app.post('/notes', (req, res) => {    // You'll create your note here.    res.send('Hello')  });};

Когда приложение получает пост Запрос пути «/Notes», он будет выполнять код внутри обратного вызова в объекте запроса (который содержит параметры или json запроса) и объект ответа (используется для ответа).

Вы можете проверить это, используя Postman, чтобы отправить почтовый запрос на localhost: 8000/Notes.

Хороший! Вы создали свой первый реальный маршрут.

Следующим шагом является добавление некоторых параметров к вашему запросу и обработать их в своем API и, наконец, добавьте в свою базу данных.

Запрос параметров

В Postman Перейдите на вкладку для тела и добавьте несколько пар клавишных значений после выбора X-www-форма-орленкадированный переключатель.

Это добавит данные кодированных форм в ваш запрос, который вы сможете обрабатывать с вашим API.

Теперь в вашем note_routes.js Давайте просто выйти из организма.

// note_routes.js
module.exports = function(app, db) {  app.post('/notes', (req, res) => {    console.log(req.body)    res.send('Hello')  });};

Попробуйте отправить запрос почтальона, и вы увидите … undefined.

К сожалению, экспресс не может обрабатывать формы URL-кодировки самостоятельно. Но вы установили этот пакет Body-Parser …

// server.
const express        = require('express');const MongoClient    = require('mongodb').MongoClient;const bodyParser     = require('body-parser');
const app            = express();
const port = 8000;
app.use(bodyParser.urlencoded({ extended: true }));
require('./app/routes')(app, {});app.listen(port, () => {  console.log('We are live on ' + port);});

Теперь вы должны увидеть тело как объект в терминале.

{ title: 'My Note Title', body: 'What a great note.' }

Последний шаг к вашему предварительному маршруту: настройте базу данных, а затем добавьте свои данные в.

Самый простой способ настроить базу данных Mongo через MLAB : Это бесплатно для наименьшего размера, и довольно быстро настроить.

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

Затем возьмите URL здесь (второй):

А в каталоге конфигурации в корне вашего проекта создайте файл db.js.

mkdir config cd configtouch db.js

Внутри, добавьте URL:

module.exports = {  url : YOUR URL HERE};

Не забудьте добавить ваше имя пользователя и пароль (те из пользователя базы данных, а не учетная запись MLAB) в URL. (Если вы совершаете этот проект в Github, обязательно включите файл .gitignore Мне нравится , так что вы не делитесь своим паролем со всеми.)

Теперь в вашем server.js , вы можете использовать Mongoclient для подключения к вашей БД и использовать его для завершения настройки приложения:

// server.js
const express        = require('express');const MongoClient    = require('mongodb').MongoClient;const bodyParser     = require('body-parser');const db             = require('./config/db');
const app            = express();
const port = 8000;
app.use(bodyParser.urlencoded({ extended: true }));
MongoClient.connect(db.url, (err, database) => {  if (err) return console.log(err)  require('./app/routes')(app, database);
  app.listen(port, () => {    console.log('We are live on ' + port);  });               })

Если вы используете последнюю версию MongoDB (3.0+), измените его так:

// server.js
const express        = require('express');const MongoClient    = require('mongodb').MongoClient;const bodyParser     = require('body-parser');const db             = require('./config/db');
const app            = express();
const port = 8000;
app.use(bodyParser.urlencoded({ extended: true }));
MongoClient.connect(db.url, (err, database) => {  if (err) return console.log(err)                        // Make sure you add the database name and not the collection name  const database = database.db("note-api")  require('./app/routes')(app, database);
  app.listen(port, () => {    console.log('We are live on ' + port);  });               })

(Благодаря Алекс Стрельгер Для исправления для 3.0)

Это последний из вашей инфраструктуры Setup! Это все построение отсюда.

Добавление в вашу базу данных

Mongodb хранит данные в Коллекции – Что именно то, как они звучат. В вашем случае вы хотите хранить свои заметки в коллекции, называемых – вы уже догадались – заметки.

Так как вы проходите в своей базе данных как дБ Аргумент в ваших маршрутах, вы можете получить доступ к нему так:

db.collection('notes')

Создание примечания так же просто, как вызов Вставить В вашей коллекции:

const note = { text: req.body.body, title: req.body.title}  db.collection('notes').insert(note, (err, results) => {}

После завершения вставки (или не удалось по какой-либо причине), вы хотите отправить обратно ошибку, либо отправить вновь созданный объект Note. Вот полный note_routes.js:

// note_routes.js
module.exports = function(app, db) {  const collection =   app.post('/notes', (req, res) => {    const note = { text: req.body.body, title: req.body.title };    db.collection('notes').insert(note, (err, result) => {      if (err) {         res.send({ 'error': 'An error has occurred' });       } else {        res.send(result.ops[0]);      }    });  });};

Попробуйте! Отправить запрос пост-к-www-form-urlencoded post с postman, с Название и Тело Установите под вкладку тела.

Ответ должен выглядеть так:

Если вы войти в MLAB, вы также должны увидеть созданную записку в базе данных.

Ваш прочитанный путь

Теперь вы можете немного подобрать темп.

Скажем, вы хотите вернуть обратно, которую вы только что создали, навигации по localhost: 8000/Notes/{id}. В этом случае это было бы localhost: 8000/Notes/585182bd42ac5b07a9755ea3.

(Если у вас нет идентификатора для одного из ваших заметок, вы можете проверить MLAB или просто создать новый).

Вот что это будет выглядеть в note_routes.js :

// note_routes.js
module.exports = function(app, db) {  app.get('/notes/:id', (req, res) => {      });
  app.post('/notes', (req, res) => {    const note = { text: req.body.body, title: req.body.title };    db.collection('notes').insert(note, (err, result) => {      if (err) {         res.send({ 'error': 'An error has occurred' });       } else {        res.send(result.ops[0]);      }    });  });};

Как и раньше, вы собираетесь вызвать метод в вашей основе базы данных заметки. Здесь это удачно по имени Findone.

// note_routes.js
module.exports = function(app, db) {  app.get('/notes/:id', (req, res) => {    const details = { '_id':  };    db.collection('notes').findOne(details, (err, item) => {      if (err) {        res.send({'error':'An error has occurred'});      } else {        res.send(item);      }    });  });
app.post('/notes', (req, res) => {    const note = { text: req.body.body, title: req.body.title };    db.collection('notes').insert(note, (err, result) => {      if (err) {         res.send({ 'error': 'An error has occurred' });       } else {        res.send(result.ops[0]);      }    });  });};

Вы можете схватить идентификатор из параметров URL через req.params.id Отказ Однако, если вы попытаетесь просто Plop в строке в <> выше, это не будет работать.

MongoDB требует не только идентификатора, как строка , но как идентификатор объект Или, как они называют это, объектом.

Не волнуйтесь, это простое исправление. Вот полный код:

// note_routes.js
var ObjectID = require('mongodb').ObjectID;
module.exports = function(app, db) {  app.get('/notes/:id', (req, res) => {    const id = req.params.id;    const details = { '_id': new ObjectID(id) };    db.collection('notes').findOne(details, (err, item) => {      if (err) {        res.send({'error':'An error has occurred'});      } else {        res.send(item);      }     });  });
app.post('/notes', (req, res) => {    const note = { text: req.body.body, title: req.body.title };    db.collection('notes').insert(note, (err, result) => {      if (err) {         res.send({ 'error': 'An error has occurred' });       } else {        res.send(result.ops[0]);      }    });  });};

Попробуйте его с одним из ваших идентификаторов записей, и он должен выглядеть так:

Ваш удаленный маршрут

Удаление объекта на самом деле довольно то же самое, что нахождение объекта. Вы просто используете Удалить функция вместо Findone Отказ Вот полный код. Я подчеркнул, что отличается от вашего получения:

// note_routes.js
// ...
  app.delete('/notes/:id', (req, res) => {    const id = req.params.id;    const details = { '_id': new ObjectID(id) };    db.collection('notes').remove(details, (err, item) => {      if (err) {        res.send({'error':'An error has occurred'});      } else {        res.send('Note ' + id + ' deleted!');      }     });  });
// ...

Ваш обновленный маршрут

Последний! Положите в основном гибрид между чтением и созданием. Вы находите объект, затем обновите его соответственно. Если вы удалили свою только заметку, время, чтобы сделать еще один!

Код:

// note_routes.js
// ...
  app.put('/notes/:id', (req, res) => {    const id = req.params.id;    const details = { '_id': new ObjectID(id) };    const note = { text: req.body.body, title: req.body.title };    db.collection('notes').update(details, note, (err, result) => {      if (err) {          res.send({'error':'An error has occurred'});      } else {          res.send(note);      }     });  });
// ...

Теперь вы можете обновить любой из ваших заметок, например:

Обратите внимание на несовершенство с этим кодом – если вы не предоставите корпус или заголовок, запрос на поставку будет аннулировать эти поля в ноте в базе данных.

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

API завершен

Это оно! У вас есть рабочий узел API с каждой из четырех основных операций CRUD.

Целью этого учебника состояла в том, чтобы дать вам степень знакомства с Express, Node и MongoDB – вы можете использовать ваше простое приложение в качестве запуска для более сложных проектов.

В будущем я буду писать учебники для создания более простых API на разных языках и каркасах. Нажмите кнопку следуйте, если вы заинтересованы!

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

Спасибо за прочтение!