Самый простой пример “Привет, Мир!” на nodejs и express, который возвращает json, работает как api, создадим файл index.js
const express = require('express');
const app = express();
app.get('/', (req, res)=>{
res.json({
message: 'Привет, мир!'
})
})
app.listen(3000, function () {
console.log('Сервер запущен!');
})
Конечно предварительно нужно создать файлы package.json, например при помощи команды:
npm init
и установить express:
npm install express --save
После запуска node index.js
Браузер по адресу http://localhost:3000 возвращает json:
{"message":"Привет, мир!"}
Программа для тестирования http запросов
Для тестирования http запросов: удобно использовать программу insomnia
https://insomnia.rest/download/
Также отличная программа для тестирования запросов postman: https://www.getpostman.com/
Подключаем роутинг, разбиваем проект на файлы
После разбивки получилась такая структура проекта:
controllers
todo.js
routes
todo.js
index.js
package.json
Файл index.js:
const express = require('express');
const routerTodo = require('./routes/todo');
const PORT = process.env.PORT || 3000
const app = express();
app.use('/', routerTodo);
app.use(function(req, res, next){
const err = new Error('Ни хрена не найдено!');
err.status = 404;
next(err);
});
app.use(function(err, req, res, next){
res.status(err.status || 500);
res.json({
message: err.message,
error: err
})
})
const server = app.listen(PORT, function () {
console.log('Сервер пашет на порту: ' + server.address().port);
})
PORT – берется из переменной окружения, а если ее нет, то ставится 3000, это полезно особенно при развертывании на heroku.
Этот код говорит, что при обращении к localhost:3000 будет вызывать экспортируемую функцию из ‘./routes/todo’.
Если в роутере ничего не найдено, будет сгенерирована ошибка 404.
Если выпала ошибка, определяет, если статус не задан, то задается 500 ошибка.
use – это подключение middleware, например он может еще быть таким:
app.use(function (req, res, next) {
console.log('Time:', Date.now());
next();
});
Файл todo.js из routes:
const express = require('express');
const router = express.Router();
const ctrlTodo = require('../controllers/todo');
router.get('/', ctrlTodo.getTodo);
router.get('/welcome', (req, res)=>{
res.json({
message: 'Добро пожаловать!'
})
});
module.exports = router;
Этот код говорит, что при обращении к localhost:3000, будет вызываться todo.js из controllers, а при обращении на localhost:3000/welcome, будет выводится json c месседжем ‘Добро пожаловать!’
Файл todo.js из controllers:
module.exports.getTodo = function(req, res) {
res.json({
message: 'Список задач!'
})
}
Получение параметров в запросе GET
http://localhost:3000/todo?name=todolist&user=test – это GET запрос
app.get('/todo', function(req, res) {
console.log(req.query.name);
res.json(req.query.name);
});
Именованные параметры маршрутизации
http://localhost:3000/todo/login
app.get('/todo/:name', function(req, res) {
console.log(req.params.name);
res.json(req.params.name);
});
POST Запросы
const express = require('express');
const app = express();
const bodyParser = require('body-parser');
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true });
app.post('/todo', function(req, res) {
console.log(req.body.name);
res.json(req.body.name);
})
Для пост запросов добавляем дополнительно body-parser.
extended, если хотим передавать массив значений, то указываем true, в большинству случаев хватает и false
Обработка запросов
var express = require('express');
var app = express();
app.all('/', function (req, res, next) {
console.log('Буду выполнятся для любого запроса и пошлю запрос дальше по очереди ...');
next(); // посылаю на х.. к следующему обработчику
});
app.get('/', function (req, res) {
res.send('Получил GET запрос');
});
app.get('/:id', function (req, res) {
let id = req.params.id;
res.send('Получил GET запрос с параметром: ' + id);
});
app.post('/', function (req, res) {
res.send('Получил POST запрос');
});
app.put('/', function (req, res) {
res.send('Получил PUT запрос');
});
app.patch('/', function (req, res) {
res.send('Получил PATCH запрос');
});
app.delete('/', function (req, res) {
res.send('Получил DELETE запрос');
});
app.listen(3000, function () {
console.log('Сервер слушает внимательно!');
});
Отключение CORS в Node.js
Для отключения CORS в Node.js воспользуемся библиотекой cors
Устанавливаем:
npm install cors
Вставляем в проект:
const cors = require('cors');
app.use(cors());