почему node.js (Express) не обслуживает этот маршрут?и как мне это исправить? - PullRequest
0 голосов
/ 26 июня 2018

Я пишу приложение и пытаюсь выяснить, почему этот маршрут для входа не регистрируется.

Если у кого-то есть лучшая модель для маршрутов, которыми они могут поделиться, или решениена проблему ответьте

import express from 'express';
const router = express.Router();

router.route('/login').post((req, res) => {
    console.log('login');
    let user = Users.getUser(req.body.email);

    if (!user) {
        console.log(`unable to find user: ${user}`);
        res.status(401).send('Unable to find username');
        return;
    }

    bcrypt.compare(req.body.pass, user.password, (err, goodComparison) => {
        if (err) {
            console.log(err);
            res.status(401);
        } else if (goodComparison) {
            // Good password, generate key, send response
            let key = Sessions.generateSession(user, token => {
                let responseData = {
                    id: user.id,
                    username: user.username,
                    email: user.email,
                    admin: user.admin,
                    token: token
                };
                res.status(200).json(responseData);
            });
            // Invalid password
        } else {
            res.status(401);
        }
    });
});

export { router };

console.log ('login'); никогда не вызывается из-за 404, маршрут не обслуживается.

import express from 'express';

const router = express.Router();
import { router as loginRouter } from './routes/login.route';

/**
 * TODO:
 * Possibly automate routes, or json import
 */
export default {
    /** Initiate routers */
    registerRoutes: function() {
        console.log('registering routes');
        console.log(loginRouter);
        router.use('/login', loginRouter); /* HERE */
    }
};

в моем app.js (да, он правильно импортируется)

// Register routes

// Register routes
Routes.registerRoutes();

мое приложение 404 отправляет сообщение для / login, но если я добавлю код маршрутизации непосредственно в app.js, оно будет работать

Если это связано с тем, как я экспортирую маршрут или обрабатываю маршрут или что-то еще, я много раз искал в Интернете решение и не смог его найти.Предложения и решения очень ценятся!

1 Ответ

0 голосов
/ 26 июня 2018

Маршрутизатор, созданный во втором кодовом блоке с const router = express.Router();, никогда не подключается ни к чему.Его необходимо подключить к экспресс-экземпляру, который подключен к http-серверу.

Сам по себе простой вызов router.use(...) ни к чему не приводит.Этот маршрутизатор должен быть подключен к экземпляру Express, который сам подключен к http-серверу, который был запущен для входящих запросов http для отправки на маршрутизатор.


Кроме того, кажется, что вытакже пытается создать маршрут для /login/login, а не просто /login.Когда вы делаете это:

router.use('/login', loginRouter); 

Это говорит о том, что любые запросы отправляются на router, отфильтровывайте запрос так, чтобы только запросы, начинающиеся с /login, отправлялись на loginRouter.Затем внутри loginRouter у вас есть это:

router.route('/login').post(...)

, который говорит, что для запросов, которые пришли к router (что на самом деле loginRouter из предыдущего кода), ищите дополнительный путь/login на то, что уже было сопоставлено.Это означает, что вы будете искать /login/login, что, вероятно, не то, что вы публикуете.


К вашему сведению, ваш код намного сложнее следовать, когда вы используете разные символические имена для одного и того же маршрутизаторав разных файлах.Если вы собираетесь использовать loginRouter в одном месте, то для этого конкретного маршрутизатора используйте одно и то же имя во всех ваших файлах.Ваш код будет намного менее запутанным и намного менее вероятно, что кто-то допустит ошибку.Вы называете это loginRouter в одном месте и router в другом.И тогда у вас есть другие маршрутизаторы, которые вы также называете router.Очень запутанно.

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