Node.JS один из трех одинаково структурированных путей не работает - PullRequest
0 голосов
/ 05 января 2020

Я довольно новичок в Node.js, и в настоящее время я создаю бэкэнд API для проекта. У меня есть 3 маршрута в моем приложении. сообщества, пользователи и электронные письма.

   //module for email stuff
   emailsModule = require('./api/routes/emails')(connection);
   const emailsRoutes = emailsModule.router;
   app.use('/emails', emailsRoutes);

   //module for societies
   societyModule = require('./api/routes/societies')(connection);
   const societyRoutes = societyModule.router;
   app.use('/societies', societyRoutes);

   //module for users
   usersModule = require('./api/routes/users')(connection);
   const usersRoutes = usersModule.router;
   app.use('/users', usersRoutes);

Модули societies и emails работают, но модуль электронной почты не работает. Я просто не могу понять, почему это не работает, я пробовал разные вещи, но модуль электронной почты просто не работает. Вывод почтальона говорит: «Не удается получить / электронные письма /. Это моя функция module.exports:

module.exports = function(connection) {
    module.connection = connection;
    sql = connection;
    module.router = router;
    console.log("sacramento");    //test output
    return module;
}

Пример маршрута:

router.get("/:email"), (req, res) => {
    var credentialCheck = new sql.Request();
    credentialCheck.input("email", sql.VarChar, req.query.email);
    credentialCheck.input("passwort", sql.VarChar, req.body.password);
    credentialCheck.execute("checkSocietyCredentials",
    (er, result) => {
        if ( er ) {
            res.status(200).send({
                error:er
            });
        }
        else {
            res.status(200).send(
               {
                   isEmailValid    : result.recordsets[0][0],
                   isPasswordValid : result.recordsets[0][1]
               } 
            );
        }
    });
}

Это может быть просто небольшая ошибка глупости, как / / в пути. URL, который я использую для этого модуля: http://localhost:3000/emails/?email=example@gmail.com. Я был бы очень благодарен, если бы кто-то нашел ошибку в моем скрипте.

Ответы [ 2 ]

0 голосов
/ 05 января 2020

Это потому, что вы определили параметр маршрута электронной почты как суб-маршрут /emails.

Поэтому ожидаемый URL-адрес должен быть примерно таким: http://localhost:3000/emails/example@gmail.com.

У вас есть два варианта ,

  1. измените определение маршрута на router.get("/", ...)
  2. оставьте определение маршрута как router.get("/:email", ...), измените URL-адрес, как в примере выше, и получите доступ к электронной почте, например, req.params.email

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

0 голосов
/ 05 января 2020

Я вижу несколько проблем, которые необходимо исправить.

Этот синтаксис неправильный:

router.get("/:email"), (req, res) => {

Это должно быть

router.get("/:email", (req, res) => { 

, и тогда вы будете необходимо добавить ) в конце кода функции.

Вы просто определяли маршрут для:

router.get("/:email")

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


Также с:

app.use('/emails', emailsRoutes)

и

router.get("/:email")

Маршрут, который вы запрашиваете, должен быть /emails/someEmail, где someEmail - то, что вы хотите :email параметр должен быть. Если это фактический адрес электронной почты, он должен быть правильно закодирован в URL.


И в этом обработчике маршрута /:email вы ссылаетесь на req.body.password. Это не будет работать. req.body пуст для запроса GET. Он используется только для запроса POST или PUT и будет заполнен только в том случае, если вы используете правильное промежуточное программное обеспечение или прочитаете и проанализируете тело в req.body.

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

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