Как сгруппировать express маршрутов как express -group-routes? - PullRequest
0 голосов
/ 09 июля 2020

Я пробовал с express -group-routes и очень хорошо работает на моем локальном хосте, но не обнаруживает никаких маршрутов при запуске в контейнере docker

У меня просто код, который возвращает JSON следующим образом:

{
    "message": "Service Running"
}

и другие маршруты.

Маленькая служба Expressjs отлично работает с node src/server.js в Ubuntu, и все маршруты найдено.

Проблема возникает, когда я помещаю код в контейнер.

DockerFile выглядит так

FROM node:12.18.2-alpine3.12

ENV PORT=3000

EXPOSE ${PORT}

COPY . /app

WORKDIR /app

RUN npm install

CMD ["node", "src/server.js"]

Сервер. js выглядит вот так

const express = require("express");
const bodyParser = require("body-parser");
const app = express();

// parse requests of content-type: application/json
app.use(bodyParser.json());

// parse requests of content-type: application/x-www-form-urlencoded
app.use(bodyParser.urlencoded({ extended: true }));

var { router } = require('./routes/index');

const port = process.env.PORT || 3000;
app.use(router);

app.listen(port,() => console.log("Server started :::", new Date().getTime()));

, а файл маршрута выглядит так

const util = require('../util/util');
const auth = require("../controllers/authController.js");
const app = require('express');
const { check, validationResult, query } = require("express-validator");
const router = app.Router();
require('express-group-routes');
module.exports = (router) => {
    router.group('/api', (router) => {

        router.get("/", (req,res) => {
            return res.status(200).send({ message: "Service Running" });
        });


        router.get("/users", (req, res) => {
            const errors = validationResult(req);
            if (!errors.isEmpty()) {
                return util.ResponseUtil.generateResponseJSON(res, 503, 'Error in validation', { errors: errors.mapped() });
            } else {
                auth.userInfo(req, res);
            }
        });

    });
}
    

  1. при запуске контейнера docker docker run -it -p 3000:3000 service:latest

  2. Приложение запущено, и я получаю Server started ::: 1594299481981

  3. Я пытаюсь GET http://localhost:3000/api/

  4. Он возвращает мне

<!DOCTYPE html>



    
    Error



    Cannot GET /api/

Что я пробовал

  • Использовать узел 10
  • Использовать узел 12

1 Ответ

1 голос
/ 09 июля 2020

express -group-routes активно не поддерживается (4 года go)

Также его npm сайт https://www.npmjs.com/package/express-group-routes поддерживает нет репозитория github!

Попробуйте использовать этот фрагмент:

https://github.com/jrichardsz/nodejs-express-snippets/blob/master/01-hello-world.js

В котором я показываю вам базовый пример c маршрутов.

Если вы хотите сгруппировать свои маршруты, вы можете использовать что-то вроде этого:

сервер. js

const app = require('express');
const AdminRoute = require ...
const UserRoute = require ...
....
AdminRoute.configure(app)
UserRoute.configure(app)

Или это

  fs.readdirSync(`/some/folder/routes/`).forEach(function(file){
    var commandRequire = require(`/some/folder/routes/`+file);
    var command = new commandRequire();
  });

, в котором я читаю js файлов из папки и создаю их динамически, поэтому ваш сервер. js будет более сокращен:

const app = require('express');
const ScanRoutes = require ...
...
ScanRoutes.scan("routes/folder", app)
...