Node.js / Express получить добавление маршрута декларативно - PullRequest
0 голосов
/ 24 июня 2018

Я пытаюсь управлять своими маршрутами в декларативных объектах, а затем инициализировать / зарегистрировать обработчики конечных точек, используя один или несколько объектов.

К сожалению, когда я пытаюсь зарегистрировать обработчики в цикле декларативных маршрутов, методов и обработчиков, кажется, что маршруты не зарегистрированы в Express и приводят к 404, когда я пытаюсь получить доступ к маршрутам.

Вот фрагмент кода:

const services = require('./services.js');

const appRoutes = [
  { route: '/x/user', handler: { get: services.getUserName, post: services.getUserName } },
  { route: '/x/ping', handler: { get: services.ping } },
  { route: '/x/mary/had/:foo/little/:animal', handler: { get: (req, res) => res.send({ foo: req.params.foo, animal: req.params.animal }) } }
];

class routes {
  static registerRoutes(app, rs) {
    rs.forEach(r => {
      const rt = r.route;
      const h = r.handler;
      console.log('registerRoutes.routes.forEach: ' + rt + '; hs: ' + h.get);
      if (h.get) app.get(rt, h.get);
      if (h.post) app.post(rt, h.post);
      if (h.delete) app.delete(rt, h.delete);
      if (h.head) app.head(rt, h.head);
      if (h.put) app.put(rt, h.put);
    });
  }
  static initializeRoutes(app) {
    this.initializeDevRoutes(app);
  }
  static initializeDevRoutes(app) {
    const rs = [
      { route: '/z/user', handler: { get: services.getUserName, post: services.getUserName } },
      { route: '/z/ping', handler: { get: (req, res) => res.send('pinged') } }
    ];
    this.registerRoutes(app, appRoutes);
    this.registerRoutes(app, rs);
    app.get('/api/getUsername', services.getUserName); // (req, res) => res.send({ username: os.userInfo().username }));
    app.get('/api/ping', services.ping); // (req, res) => res.send({ ping: new Date() }));
    app.get('/api/mary/had/:foo/little/:animal', (req, res) => res.send({ food: req.params.foo, animal: req.params.animal }));
  }
}

module.exports = routes;

Маршруты /x/... или /z/... не были успешно зарегистрированы, поскольку я получил 404 для всех этих маршрутов.

Однако для явных вызовов на app.get('/api/....) внизу правильно зарегистрируйте маршруты, так как возвращаются ожидаемые результаты 200 состояний.

Это мой первый проект node / js, поэтому я могу что-то упустить из того, какОбласти применения JS и обработка закрытий.

Любая помощь / предложения приветствуются.

Спасибо.

1 Ответ

0 голосов
/ 03 июля 2018

Проблема заключалась в том, что я запустил сервер dev, используя: npm run dev.

Браузер автоматически открывается для сервера разработки (работает на порту 3000), который только проксирует /api на фактическом сервере (работает на порту 8080) (внутри файла webpack.config.js в devServer).Маршруты работают должным образом при подключении к фактическому серверу, работающему на порту 8080.

...