Как создать функцию asyn c CRUD, которая создает пользователя, генерирует токен и регистрирует пользователя в node.js и Postgres? - PullRequest
0 голосов
/ 28 января 2020

ПРИМЕЧАНИЕ: я использую node.js, express. js, Postgres и библиотеку pg-обещания.

ЧТО Я ХОЧУ

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

ЧТО Я В настоящее время ВИДЮ

Я вижу пустой массив {}, когда я тестировал свой код в Postman. При тестировании пользователь создается в базе данных Postgres, как и ожидалось, но ответ в почтальоне показывает {}. Однако я хотел, чтобы в ответе отображалось сообщение об успешном завершении и сгенерированный токен. Я не знаю, если проблема в том, что функция не генерирует токен. Найдите мой код ниже:

ФУНКЦИЯ МОЙ ТЕКУЩИЙ СОЗДАТЕЛЬ

async createUser(req, res) {
    if (!req.body.username || !req.body.email || !req.body.password) {
      return res.status(400).send({'message': 'Some values are missing'});
    }
    const hashedPassword = await bcrypt.hash(req.body.password, 10);
    const createuserquery = `insert into user_table(username, email, email_verified, password, role, created_at, last_login)
                  VALUES ($1, $2, $3, $4, $5, now(), now()) returning *`;
  const createuservalues = [req.body.username, req.body.email, req.body.email_verified, hashedPassword, req.body.role];

  try {
    const result = await db.one(createuserquery, createuservalues);
    const token = jwt.sign(
      { username: result.rows[0].username }, process.env.JWT_SECRET, { expiresIn: '7d' }
    );
  return res
    .status(200) 
    .cookie('jwt', token, {
      httpOnly: true
    })
    .json({
      success: true,
      data: data,
      message: 'One user created'
    });
} catch (err) {
    return res.json(err);
  }
}

Я подозреваю, что токен ниже:

const token = jwt.sign(
      { username: result.rows[0].username }, process.env.JWT_SECRET, { expiresIn: '7d' }
    );

ИЛИ Возвращаемая часть res ниже:

return res
    .status(200) 
    .cookie('jwt', token, {
      httpOnly: true
    })
    .json({
      success: true,
      data: data,
      message: 'One user created'
    });
} catch (err) {
    return res.json(err);
  }

ИЗМЕНЕНИЯ ПРЕДЛОЖЕНЫ Я внес изменение, предложенное @TitusSutioFanpula, но в результате по-прежнему отображается пустой массив {} в почтальоне

return res
    .status(200) 
    .cookie('jwt', token, {
      httpOnly: true
    })
    .json({
      success: true,
      data: { token },
      message: 'One user created'
    });
} catch (err) {
    return res.json(err);
  }

1 Ответ

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

??‍? Из твоего кода я не знаю, откуда взялись твои data. Но вы можете изменить данные с помощью token.

Например, , вы можете посмотреть этот код ниже или вы можете изменить свой ответ с помощью этого кода ниже ?:

try {
    const result = await db.one(createuserquery, createuservalues);
    const token = jwt.sign({ username: result.rows[0].username }, process.env.JWT_SECRET, { expiresIn: '7d' });
    return res
      .status(200) 
      .cookie('jwt', token, {
        httpOnly: true
      })
      .json({
        success: true,
        data: { token },
        message: 'One user created'
      });
    } catch (err) {
      console.log(err.message);
      return res.status(500).send('Something failed');
    }

Надеюсь, это поможет вам ?.

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