узел программно требует экспресс-маршрутов - PullRequest
0 голосов
/ 07 марта 2019

Я новичок в узле, который сейчас широко использую с функциями firebase.Я нашел этот замечательный кусок кода здесь :

    const app = express();
    const main = express();
    main.use('/', app);
    main.use(bodyParser.json());
    main.use(bodyParser.urlencoded({
      extended: false
    }));
    exports.webApi = functions.https.onRequest(main);
    const glob = require("glob");
    const files = glob.sync('./**/*.function.js', {
      cwd: __dirname,
      ignore: './node_modules/**'
    });
    for (let f = 0, fl = files.length; f < fl; f++) {
      const file = files[f];
      const functionName = file.split('/').pop().slice(0, -12); // Strip off '.function.js'
      if (!process.env.FUNCTION_NAME || process.env.FUNCTION_NAME === functionName) {
        exports[functionName] = require(file);
      }
    }

Он прочесывает стек файлов в функциях / filename / etc.f.js и вытаскивает мои функции экспорта, которые все заканчиваютсяf.js.Работает отлично.Теперь я переназначил это, чтобы также попытаться вставить аналогичный стек файлов для маршрутов API, и теперь он выглядит следующим образом

    const app = express();
    const main = express();
    main.use('/', app);
    main.use(bodyParser.json());
    main.use(bodyParser.urlencoded({
      extended: false
    }));
    exports.webApi = functions.https.onRequest(main);
    const glob = require("glob");
    const camelCase = require("camelcase");
    const files = glob.sync('./**/*.js', {
      cwd: __dirname,
      ignore: ['./node_modules/**', './index.js']
    });
    for (let f = 0, fl = files.length; f < fl; f++) {
      const file = files[f];
      const pathCheck = file.slice(-6, -3);
      if (pathCheck === 'api') {
        const path = file.slice(1, -7); // Strip off '.api.js'
        app.use(`${path}`, require(file));
      } else {
        const functionName = camelCase(file.slice(0, -5).split('/').join('_')); // Strip off '.f.js'
        if (!process.env.FUNCTION_NAME || process.env.FUNCTION_NAME === functionName) {
          exports[functionName] = require(file);
        }
      }
    }

Структура файла для моего стека API выглядит следующим образом

    functions
    ---api
    ------v1
    --------deposit.api.js
    --------invoice.api.js
    ------v2
    --------deposit.api.js
    --------deposit
    ------------:depistId (file name)
    -----------------transaction.api.js
    ---db
    ------deposit
    ------------onCreate.f.js
    ------------onUpdate.f.js

Ожидаемые пути будут


    /api/v1/deposit
    /api/v1/invoice
    /api/v2/deposit
    /api/v2/deposit/:deposit/transaction

В каждом из моих filename.api.js есть что-то, что влияет на

    var express = require('express')
    var router = express.Router()

    // middleware that is specific to this router
    router.use(function timeLog(req, res, next) {
      console.log('Time: ', Date.now())
      next()
    });

    router.delete('/:depositId', (req, res) => {
      // firebaseHelper.firestore
      //     .deleteDocument(db, contactsCollection, req.params.contactId);
      return res.status(200).send('Deposit deleted');
    });

    module.exports = router

Это просто не похоже на работу.Если я вручную добавлю путь и требую файл в index.js, он будет работать нормально.Хотите знать, если что-то не так с моим кодом, или понимание того, как работает узел, оцените любую помощь.

Woohoo за первый вопрос!,

Заранее спасибо,

Чад

...