NodeJS Создание REST Post API

Я пытаюсь научиться создавать конечные точки REST с помощью NodeJS.

Не могли бы вы дать мне представление о том, как я напишу бизнес-логику для следующей POST конечной точки?

Feature: Add a measurement
  I want to be able to capture a measurement of several metrics at a specific time

  Scenario: Add a measurement with valid (numeric) values
    # POST /measurements
    When I submit a new measurement as follows:
      | timestamp                  | temperature | dewPoint | precipitation |
      | "2015-09-01T16:00:00.000Z" | 27.1        | 16.7     | 0             |
    Then the response has a status code of 201
    And the Location header has the path "/measurements/2015-09-01T16:00:00.000Z"

  Scenario: Cannot add a measurement with invalid values
    # POST /measurements
    When I submit a new measurement as follows:
      | timestamp                  | temperature    | dewPoint | precipitation |
      | "2015-09-01T16:00:00.000Z" | "not a number" | 16.7     | 0             |
    Then the response has a status code of 400

  Scenario: Cannot add a measurement without a timestamp
    # POST /measurements
    When I submit a new measurement as follows:
      | temperature | dewPoint | precipitation |
      | 27.1        | 20       | 0             |
    Then the response has a status code of 400

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

// server.js
import { createServer } from 'http';
import handler from './routes';

const PORT = +process.env.PORT || 5000;

const server = createServer(handler)
  .on('listening', () => {
    const { port } = server.address();
    console.info(`Server listening on port ${port}`);
  })
  .on('close', () => console.info('Server closed.'));

server.listen(PORT);
// routes.js
const server = express();
server.use(parseJsonBody());

server.get('/', (req, res) => res.send('server is running!'));

registerMeasurements(server);
registerStats(server);

export default server;

Я отредактировал пост для других значений поста измерения, чтобы вы начали

ABC 02.03.2019 05:39
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
1
606
1

Ответы 1

Раньше нам приходилось использовать bodyParser, но теперь вы можете использовать вместо bodyParser

Пример парсера тела

npm install --save body-parser

var bodyParser = require('body-parser')
app.use( bodyParser.json() );       // to support JSON-encoded bodies
app.use(bodyParser.urlencoded({     // to support URL-encoded bodies
  extended: true
})); 

app.use(express.json());       // to support JSON-encoded bodies
app.use(express.urlencoded()); // to support URL-encoded bodies

app.post('/measurement', function(req, res) {
    var timestamp = req.body.timestamp; // Post body value, ex. measurement
    var temperature = req.body.temperature;
});

Теперь нам не нужно использовать bodyParser, мы можем сделать следующее, что эквивалентно

app.use(express.json());
app.use(express.urlencoded());
app.use(express.multipart());

Вот пример базовой логики if после почтового запроса.

const express = require('express');
const app = express();

var bodyParser = require('body-parser')
app.use( bodyParser.json() );       // to support JSON-encoded bodies
app.use(bodyParser.urlencoded({     // to support URL-encoded bodies
    extended: true
}));


app.post(`/mesurement`, (req, res) => {
    var temperature = req.body.temperature;
    let timestamp = req.body.timestamp;
    let dewPoint = req.body.dewpoint;
    let precipitation = req.body.precipitation;
    if (temperature && timestamp && dewPoint && precipitation !== undefined) {
        temperature = parseFloat(temperature);
        dewPoint = parseFloat(dewPoint);
        precipitation = parseFloat(precipitation);
        if (Number.isInteger(temperature)
            && Number.isInteger(dewPoint)
                && Number.isInteger(precipitation)) {
            console.info("We recieved, ", temperature, dewPoint, precipitation)
            res.status(201)
        }
    }

});

app.listen(3000);

Проверьте конечные точки публикации с помощью https://www.getpostman.com.

Не могли бы вы показать мне, как это будет выглядеть с учетом требований и условий POST измерений?

Null isTrue 02.03.2019 05:19

Дайте мне секунду, и я опубликую пример.

ABC 02.03.2019 05:21

Я разместил небольшой пример, чтобы определить, является ли значение температуры поста целым числом, вы можете расширить его. Я предлагаю использовать приложение Postman для тестирования почтовых запросов.

ABC 02.03.2019 05:27

классно спасибо большое! Итак, на Почтальоне, какой правильный URL-адрес нужно проверить? Будет ли это правильно? http://localhost:5000/measurements/'what else?

Null isTrue 02.03.2019 05:30

Вы хотели бы протестировать localhost:порт/конечная точка, а затем перейти на вкладку body и использовать закодированный URL-адрес, а также установить значение body на температуру для req.body.temperature и значение на ваше тестовое значение. Я добавил скриншот моей конфигурации почтальона.

ABC 02.03.2019 05:31

????????

Null isTrue 02.03.2019 05:33

Для вашего кода состояния просто res.status(200) для кода состояния 200.

ABC 02.03.2019 05:34

Следуя вашему коду, а затем добавляя почтальона, как вы предложили http://localhost:8000/measurements?temperature=122, плюс вкладку body и используйте закодированный URL, ошибки как: `<pre>Error: Bad Request....</pre>` является ? правильным в этом почтовом вызове ?

Null isTrue 02.03.2019 06:07

Проверьте app.post('/measurements'); Я изменил URL на измерение

ABC 02.03.2019 07:28

Другие вопросы по теме