Маршрутизация моего экспресс-приложения не работает - PullRequest
0 голосов
/ 18 марта 2019

Я пытаюсь наиболее оптимально структурировать файлы моего приложения Express. И модуль Router меня смущает.

Насколько я знаю, все запросы должны быть в папке моделей.

Это моя текущая желаемая настройка (которая не работает для моих файлов query.js и query2.js, ошибка, которую я получаю, заключается в том, что «Приложение» не определено). Когда я помещаю код запроса (из файла query.js) в файл App.js напрямую, он работает, однако.

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

Как исправить?

Вот моя структура проекта:

project_structure

Вот содержимое моих файлов:

APP.JS

const express = require('express');
const request = require('request');
const requestPromise = require('request-promise');
const bluebird = require('bluebird');
const bodyParser = require('body-parser');
const cors = require('cors');
const app = express();

app.use(cors());

const router = require('./routes'); 
app.use(router);

function App(req, res) {
  if (!req.url) {
    req.url = '/';
    req.path = '/';
  }
  return app(req, res);
}

module.exports.my_server = App;

INDEX.JS (в папке маршрутов)

const express = require('express');
const router = express.Router();
const config = require('../config');

let email = require('../models/email');

const query = require("../models/query");
const query2 = require("../models/query2");

router.post('/api/subscribe', function (req, res) {
  const data = {
    subscribed: true,
    address: req.body.email,
  };
...

module.exports = router;

QUERY.JS (в папке моделей)

app.get('/query', function(req, res, next) {
    request({
      uri: 'https://queryapi.api/search?q=stuff&api-key=api_key',
      qs: {
        api_key: 'api_key',
      }
    }).pipe(res);
  });

Ответы [ 2 ]

1 голос
/ 19 марта 2019

У вас нет доступа к переменной app из вашего query.js.Вместо этого вы захотите экспортировать ваши методы из query.js, чтобы вы могли импортировать их на свой маршрутизатор следующим образом:

EDIT : изменить глагол http с .get на .post

заменить:

app.get('/query', function(req, res, next) {

на

exports.post = function(req, res, next) {

, и таким образом вы бы назначили экспортированный метод query.post для маршрута /api/subscribe/query

const query = require("./query");

router.post('/api/subscribe/query', query.post);
/* more end points below: */
// router.get(...
// router.put(...
//  ...and so on

POST запрос на /api/subscribe/query

PS: это работает, но если у вас есть больше маршрутов, все может быстро испортиться, поэтому было бы удобнее обслуживать, если вы реструктурируете свой источник так, чтобы основные маршруты были четко выраженыв файле вашего приложения;Но это еще одна проблема.

0 голосов
/ 18 марта 2019

В index.js добавьте эту строку.

router.use(query)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...