Перенаправление на значение таблицы базы данных

#javascript #node.js #database #postgresql

#javascript #node.js #База данных #postgresql

Вопрос:

Я пишу средство сокращения URL, но у меня возникли некоторые проблемы.

Поэтому, когда пользователь отправляет запрос, скажем http://localhost:3000/1 , я хочу, чтобы он перенаправлял на URL-адрес, хранящийся в столбце original_url, который имеет идентификатор 1 в моей базе данных.

Вот функция, которую я написал для достижения этой цели:

 // :id will match anything after the / in the url, and set it as the req.params.id value
app.get('/:id', function (req, res) {
  console.log("hi you're about to match url id to database id");
  //get a prostgres client from the connection pool
  pg.connect(connectionString, (err, client, done) => {
    //handle connection errors
    if (err) {
      done();
      console.log(err);
      return res.status(500).json({ success: false, data: err });
    }
    //match id in database to id from query in url
    const query = client.query("SELECT * FROM items WHERE id ="   req.params.id);
    console.log("successfully matched database id value to id value in url");

    console.log(req.query);
    res.redirect(req.query);
  });
});
 

Проблема в том, что после того, как я сопоставил правильный идентификатор, я не знаю, как перенаправить пользователя на URL-адрес, хранящийся в моем столбце original_url, который содержит URL-адрес для перенаправления.

Как я могу получить значение original_url, соответствующее введенному идентификатору?

Вот мой полный код

Ответ №1:

Предполагая, что вы используете пакет node-postgres из npm (npm i —save pg), результаты запроса доступны как result.rows. Если вы находите одну строку, result.rows[0].original_url предположительно будет иметь ваше перенаправление. Кроме того, пакет pg использует шаблон обратного вызова общего узла.

 client.query('SELECT * FROM items WHERE id = $1', [req.params.id], function (err, result) {
    if (err) throw err;

    console.log(result.rows[0]); // outputs: { original_url: 'http://mysite.dev' };
}
 

Если вы используете restify server, вы должны пройти рядом с redirect . Экспресс этого не требует.

Например, с помощью restify:

 app.get('/:id', function (req, res, next) {
  res.redirect(url, next);
}
 

Если URL-адрес перенаправления не включает протокол (например, http), то перенаправление будет относительно текущего пути url.