0

私はNode.js、またはJavaScript全般に不慣れで、現在、postgresqlデータベースにクエリを実行するNode/Expressを使用してhttpサーバーをセットアップしています。ルーティングと複数のコールバックを正しく使用しているかどうかはわかりません。誰かがこれを少し明確にしてくれることを願っています。

現在、次のようになっています。

私のweb.jsで

var routes = require('./routes');
app.get('/get/user/:userid', routes.user, routes.dbquery);

そしてroutes/index.jsで

exports.user = function(request, response, next) {
    request.querystring = "select * from users where userid = " + request.param('userid');
    next();
};

exports.dbquery = function(request, response) {
    pg.connect(process.env.DATABASE_URL, function(err, client, done) {
        var query = client.query(request.querystring);  
        query.on('row', function(row, result) {
            result.addRow(row);
        });
        query.on('end', function(result) {
            response.send(JSON.stringify(result.rows));
        });
        done();
    });
};

動作しますが、これはルーティングを設定する正しい方法ですか? 具体的には、リクエスト変数内でクエリ文字列などの変数を渡すだけでいいのでしょうか? または、これに対する他の好ましい解決策はありますか?

私がやりたい理由は、データベースを照会する複数のルートがあるため、dbquery 関数を再利用できるようにしたいからです。

4

1 に答える 1

1

はい、異議を唱えたいものは何でも添付できrequestます (これは一般的な方法です)。ただし、データはリクエストのみに関連している必要がありますが、クエリは実際にはリクエストのみに関連しているわけではありません ( を除くuserid)。

それでは、ミドルウェアでクエリを定義する代わりに、外部関数を定義するだけではどうですか:

var get_query = function(userid) {
    // NOTE: You should validate userid!!!
    return client.query("select * from users where userid = " + userid);
};

dbqueryあなたのルートでそれを呼び出しますか?そして、にのみ取り付けuseridますrequest

于 2013-03-13T11:48:32.097 に答える