Как передать экземпляр приложения в файл маршрута в ExpressJs? - PullRequest
0 голосов
/ 15 апреля 2020

Я использую Express framework для разработки своих бэкэнд-API, но сегодня я столкнулся с одной проблемой. У меня есть один server.js (вход) файл оттуда, я хочу передать app экземпляр в routes/api.js файл. где я хотел проверить, является ли префикс конечной точки /api/v2, тогда я хочу вызвать файл routes/index.js. Но я не могу достичь этого подхода. Я добавляю свой код из server.js routes/api.js и routes/index.js файлов ниже.

Сервер. js

/** Core Packages */

/** NPM Packages */
const express = require('express');

/** Custom Packages */
const routerApi = require('./routes/api');
const dbConnect = require('./config/database');

const app = express();
dbConnect();

app.use(express.json());
app.use(express.urlencoded({extended: true}));

routerApi(app);

const PORT = 4000;

/** Creating a Server */
const server = app.listen(PORT, () => {
  console.log(`Server running at http://localhost:${PORT}/`);
});

маршрутов /api.js

/** Core Packages */

/** NPM Packages */

/** Custom Packages */

const apiRouter = (app) => {
  app.use('/api/v2', require('./index')(app));
};

module.exports = apiRouter;

маршруты / индекс. js

/** Core Packages */

/** NPM Packages */

/** Custom Packages */

const routes = (app) => {
  app.all('/*', (req, res, next) => {
    if (req.path === '/')
      return res.status(200).send({msg: 'Welcome to landing page.'});
  }
}

module.exports = routes;

Ошибка

TypeError: Router.use() requires a middleware function but got a undefined
    at Function.use (/home/admini/Documents/skreem-api-node/node_modules/express/lib/router/index.js:458:13)
    at Function.<anonymous> (/home/admini/Documents/skreem-api-node/node_modules/express/lib/application.js:220:21)
    at Array.forEach (<anonymous>)
    at Function.use (/home/admini/Documents/skreem-api-node/node_modules/express/lib/application.js:217:7)
    at apiRouter (/home/admini/Documents/skreem-api-node/routes/api.js:9:7)
    at Object.<anonymous> (/home/admini/Documents/skreem-api-node/server.js:52:1)
    at Module._compile (internal/modules/cjs/loader.js:816:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:827:10)
    at Module.load (internal/modules/cjs/loader.js:685:32)
    at Function.Module._load (internal/modules/cjs/loader.js:620:12)
    at Function.Module.runMain (internal/modules/cjs/loader.js:877:12)
    at internal/main/run_main_module.js:21:11

Может кто-нибудь помочь мне решить эту проблему? Любая помощь будет оценена. Спасибо!

1 Ответ

1 голос
/ 15 апреля 2020

В server. js file, добавьте следующее внизу вашего файла:

module.exports = app;

И затем потребуйте server. js в файлах, где это необходимо:

const app = require('path to server.js file');
...