Как включить обработчики маршрутов в несколько файлов в Express? - PullRequest
190 голосов
/ 19 мая 2011

В моем приложении NodeJS express у меня есть app.js, у которого есть несколько общих маршрутов. Затем в файле wf.js я хотел бы определить еще несколько маршрутов.

Как мне получить app.js для распознавания других обработчиков маршрутов, определенных в файле wf.js?

Простое требование , похоже, не работает.

Ответы [ 12 ]

1 голос
/ 13 февраля 2013

Это, возможно, самый удивительный вопрос / ответ (ы) о переполнении стека за всю историю.Я люблю решения Сэма / Брэда выше.Думал, что я буду взаимодействовать с асинхронной версией, которую я реализовал:

function loadRoutes(folder){
    if (!folder){
        folder = __dirname + '/routes/';
    }

    fs.readdir(folder, function(err, files){
        var l = files.length;
        for (var i = 0; i < l; i++){
            var file = files[i];
            fs.stat(file, function(err, stat){
                if (stat && stat.isDirectory()){
                    loadRoutes(folder + '/' + file + '/');
                } else {
                    var dot = file.lastIndexOf('.');
                    if (file.substr(dot + 1) === 'js'){
                        var name = file.substr(0, dot);

                        // I'm also passing argv here (from optimist)
                        // so that I can easily enable debugging for all
                        // routes.
                        require(folder + name)(app, argv);
                    }
                }
            });
        }
    });
}

Моя структура каталогов немного отличается.Обычно я определяю маршруты в app.js (в корневом каталоге проекта) с помощью require -ing './routes'.Следовательно, я пропускаю проверку по index.js, потому что я хочу, чтобы включил и эту.

РЕДАКТИРОВАТЬ: Вы также можете поместить это в функцию и вызвать ее рекурсивноотредактировал пример, чтобы показать это), если вы хотите вложить свои маршруты в папки произвольной глубины.

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

Если вы используете express-4.x с TypeScript и ES6, это будет лучший шаблон для использования;

src/api/login.ts

import express, { Router, Request, Response } from "express";

const router: Router = express.Router();
// POST /user/signin
router.post('/signin', async (req: Request, res: Response) => {
    try {
        res.send('OK');
    } catch (e) {
        res.status(500).send(e.toString());
    }
});

export default router;

src/app.ts

import express, { Request, Response } from "express";
import compression from "compression";  // compresses requests
import expressValidator from "express-validator";
import bodyParser from "body-parser";
import login from './api/login';

const app = express();

app.use(compression());
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.use(expressValidator());

app.get('/public/hc', (req: Request, res: Response) => {
  res.send('OK');
});

app.use('/user', login);

app.listen(8080, () => {
    console.log("Press CTRL-C to stop\n");
});

Намного яснее, используя var и module.exports.

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