#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.