【问题标题】:Node + Callback function pass parameters节点+回调函数传参
【发布时间】:2017-02-25 12:06:27
【问题描述】:

我正在使用带有 express 的节点。

我有两个rest api,api之间的区别只是数据库表而已。

API - 1 http://localhost/test1

API - 2 http://localhost/test2

都是post方法,

router.post('test1', findAll);

router.post('test2', findAll);

function findAll(req, res){
//Here test1 api result get from different db table.
//Here test2 api result get from different db table.
How can I sent the db table name in parameters?
//Here have logic in db and return results.
res.send(spec.resp);

}

注意:我需要对两个 api 使用相同的函数,但表名会改变。

【问题讨论】:

    标签: javascript node.js api express callback


    【解决方案1】:

    您可以创建两个使用常用findAll 方法的函数,如下所示:

    function findAllFromTable1(req, res, next){
      return findAll("table1", req, res, next);
    }
    
    function findAllFromTable2(req, res, next){
      return findAll("table2", req, res, next);
    }
    
    function findAll(tableName, req, res, next){
    //db logic
    res.send(spec.resp);
    
    }
    
    router.post('test1', findAllFromTable1);
    
    router.post('test2', findAllFromTable2);
    

    但我建议您将您的数据库逻辑与路由处理程序分开,因此使用一个处理数据库并发送回响应的函数,拥有一个包含数据库逻辑的函数,然后在路由句柄中使用该结果发送您的响应.这将使您的代码易于理解、易于测试并避免冗余。

    function findAllFromDB(){
      //db logic 
      return dbResult; // returns a promise since db operations are async.
    }
    
    router.post('test1', function(req, res, next){
       findAllFromDB
      .then(function(dbResult){res.send(dbResult)})
      .catch(function(err){  res.status(500).send(err);})
    });
    

    【讨论】:

    • 如果我错了,请纠正我。需要为每个数据库结果创建函数吗?
    • 或者请提供一个例子。我没有得到“findAllFromDB”
    • 数据库逻辑取决于您使用的数据库以及您使用的 ORM 库。但通常是的,对于每种不同的资源,您应该生成一个辅助函数。
    • 对不起,请提供示例。
    • function findAllUsers(){return db.Users.findAll()} // using sequelize docs.sequelizejs.com/en/v3
    猜你喜欢
    • 1970-01-01
    • 2018-07-15
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 2016-08-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多