Это считается одной из лучших практик работы с 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);
А глобальная структура проекта должна выглядеть следующим образом
Надеюсь, это было полезно для развития хороших привычек и лучших практик!