Я пытаюсь научиться создавать конечные точки 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;



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Раньше нам приходилось использовать 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 измерений?
Дайте мне секунду, и я опубликую пример.
Я разместил небольшой пример, чтобы определить, является ли значение температуры поста целым числом, вы можете расширить его. Я предлагаю использовать приложение Postman для тестирования почтовых запросов.
классно спасибо большое! Итак, на Почтальоне, какой правильный URL-адрес нужно проверить? Будет ли это правильно? http://localhost:5000/measurements/'what else?
Вы хотели бы протестировать localhost:порт/конечная точка, а затем перейти на вкладку body и использовать закодированный URL-адрес, а также установить значение body на температуру для req.body.temperature и значение на ваше тестовое значение. Я добавил скриншот моей конфигурации почтальона.
????????
Для вашего кода состояния просто res.status(200) для кода состояния 200.
Следуя вашему коду, а затем добавляя почтальона, как вы предложили http://localhost:8000/measurements?temperature=122, плюс вкладку body и используйте закодированный URL, ошибки как: `<pre>Error: Bad Request....</pre>` является ? правильным в этом почтовом вызове ?
Проверьте app.post('/measurements'); Я изменил URL на измерение
Я отредактировал пост для других значений поста измерения, чтобы вы начали