Всегда разделяйте файлы приложения и сервера!

Это считается одной из лучших практик работы с node/express.
Большинство из нас просто объединяют их в одном файле, как показано ниже

const express = require('express');

const app = express();
app.use(express.json());
// parse requests of content-type - application/json
app.use(express.json());
// parse requests of content-type - application/x-www-form-urlencoded
app.use(express.urlencoded({ extended: true }));
const httpServer = require('http').createServer(app);

httpServer.listen(PORT, () => {
  console.log(`listening on *:${process.env.PORT}`);
});
Войти в полноэкранный режим Выйти из полноэкранного режима

Но это не лучшее, что мы можем сделать.

Иначе: Ваш API будет доступен для тестирования только через HTTP вызовы (медленнее и гораздо сложнее генерировать отчеты о покрытии). Вероятно, вам не доставит большого удовольствия поддерживать сотни строк кода в одном файле.

Какова же альтернатива?

Декларация api и конфигурация, связанная с сетью, должны быть разделены, чтобы мы могли :

  • тестирование API в процессе работы без необходимости выполнять сетевые вызовы
  • более быстрое выполнение тестирования
  • Получение более широких метрик покрытия кода
  • Позволяет развертывать один и тот же API в гибких и различных сетевых условиях
  • Лучшее разделение проблем и более чистый код

Как это сделать?

Декларация API должна находиться в app.js:

var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');

var indexRouter = require('./routes/index');
var usersRouter = require('./routes/users');

var app = express();

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');

app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

app.use('/', indexRouter);
app.use('/users', usersRouter);

Вход в полноэкранный режим Выход из полноэкранного режима

Объявление серверной сети, должно находиться в /bin/www
const app = require(‘../app’);
const http = require(‘http’);


// Get port from environment and store in Express.
const port = normalizePort(process.env.PORT || '3000');
app.set('port', port);

// Create HTTP server.
const server = http.createServer(app);
Вход в полноэкранный режим Выход из полноэкранного режима

А глобальная структура проекта должна выглядеть следующим образом

Надеюсь, это было полезно для развития хороших привычек и лучших практик!

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *