2015-01-02 43 views
0

我試圖組織在3個文件分離功能/節點文件和回調

  • basic_routes.js
  • general_functions.js
  • db_queries.js

讓我的代碼對於GET請求,我可以使用結果行進行響應。我簡直無法將自己的頭圍繞回調函數。如何將結果行返回給客戶端?

文件:db_queries.js

function getUserData (userId, fn){ 
    client.query("select * from participationTable where ? in (userId1, userId2)", userId, function(err,rows){ 
     if (err) { 
      return fn(new Error('(customError) unable to find ongoing games')); 
     } else { 
      return fn(null, rows); 
     } 
    }); 
} 
module.exports.getUserData = getUserData; 

文件:general_functions.js

var db = require('./db_queries'); 
function getUserParticipationDeatils(req, function(err, rows){ 
    db.getUserData(req.user.userId, function(err, rows){ 
      if (err){ return done(err); } 
      // 'rows' is accessible here 
      // but how can I send it ? 
     }); 
}); 
module.exports.getUserParticipationDeatils = getUserParticipationDeatils; 

文件:basic_routes.js

var general_functions = require('./general_functions'); 
app.get('/getUserParticipation', function (req, res) { 
    general_functions.getUserParticipationDeatils(req, function(err, rows){ 
     if (err){ return done(err); } 
     return res.send(JSON.stringify(rows)); 
    }); 
}); 

請幫我結構文件general_functions功能.js

回答

1

更改getUserParticipationDeatils以接受回調fn,就像getUserData函數一樣。

事情是這樣的:

var db = require('./db_queries'); 
function getUserParticipationDeatils(req, fn){ 
    db.getUserData(req.user.userId, function(err, rows){ 
     if (err){ return fn(err); } 
     fn(null, rows); 
    }); 
}); 
module.exports.getUserParticipationDeatils = getUserParticipationDeatils; 
+0

你並不需要在這裏創建自己的匿名回調函數,只是做'db.getUserData(req.user.userId,FN)'; – idbehold

+0

@idbehold同意。這只是爲了演示OP如何處理回調。 –

+0

謝謝你們兩位。另外,你什麼時候在這裏使用'next':'app.get('/ getUserParticipation',function(req,res,next){...}'並且這意味着使用'if(err){return next(err )'而不是'if(err){return fn(err);'? –