2016-10-14 67 views
-1

我正在寫一個URL縮寫,但有一些問題。重定向到數據庫表值

因此,當用戶發送一個請求,說http://localhost:3000/1,我希望它重定向到列original_url有我的數據庫中ID的1下存儲的URL。

這裏是我寫來實現這一功能:

// :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); 
    }); 
}); 

的問題是,當我匹配正確的ID,我不知道如何將用戶重定向到存儲在我的專欄網址original_url其中包含要重新指向的網址。

如何檢索對應於輸入ID的original_url的值?

Here is my full code

回答

0

假設使用的是節點postgres的包從NPM(NPM我--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服務器,則必須通過旁邊的重定向。 Express並不要求這樣做。

例如具有的RESTify:

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

如果重定向URL不包含協議(即HTTP),則重定向將相對於當前URL路徑。