2016-10-14 5 views
-1

私はURLの短縮文字を書いていますが、いくつか問題があります。データベーステーブルの値にリダイレクト

したがって、ユーザーが要求を送信するとき、http://localhost:3000/1言って、私はそれが私のデータベースにある1のIDを持つ列original_urlの下に格納された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と一致した後、私は私の列に格納されているURLにユーザーをリダイレクトする方法がわからない、ではoriginal_urlには、リダイレクト先のURLが含まれています。

入力したIDに対応するオリジナルID番号の値を取得するにはどうすればよいですか?あなたは、NPM(NPM I --save PG)からノード-postgresのパッケージを使用していると仮定すると、

Here is my full code

答えて

0

、クエリの 結果がresult.rowsとしてご利用いただけます。 1つの行が見つかった場合、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を使用している場合は、次にリダイレクトする必要があります。 Expressはそれを必要としません。 restifyと例えば

:リダイレクトURLは、プロトコル(すなわちHTTP)が含まれていない場合

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

、その後、リダイレクトは、現在のURLパスに対してであろう。

関連する問題