2017-08-05 43 views
0

我在我的路由器上有一个回调函数,并且运行良好,但就像我想要的不重复我的回调函数来管理一个函数中的sql错误,然后我移动到外部文件回调函数移动到外部js,不起作用

动我的回调函数到外部文件之前:

var express = require('express'); 
var router = express.Router(); 
var model= require('../models/customers'); 

router.get('/', function (req, res, next) { 
    res.header('content-type', 'application/json'); 

    console.log('will do model.get'); 

    model.get(function (err, rows) { 

     if (err) { 
     res.status(500).send({error: 'Something failed!'}) 
     } else { 
     res.json({data: rows}); 
     } 

    }); 
}); 

当有错误是正常的反应:

{ 
    "error": "Something failed!" 
} 

后,我搬到通话回功能到外部文件:

./lib/dbfunctions

var dbfunctions = { 
    runSql: function (err, rows) { 
     if (err) { 
      res.status(500).send({error: 'Something failed!'}) 
     } 
     else { 
      res.json({data: rows}); 
     } 
    } 
} 
module.exports = dbfunctions ; 

,然后我在文件中导出此函数

路由器JS:

var express = require('express'); 
var router = express.Router(); 
var model= require('../models/customers'); 
var dbfunctions = require('../libs/dbfunctions'); 

router.get('/:id?', function (req, res, next) { 
    res.header('content-type', 'application/json'); 

    if (req.params.id) { 

     model.getById(req.params.id, function (err, rows) { 
      if (err) { 

       res.json(err); 
      } 
      else { 
       res.json({data:rows}); 
      } 
     }); 
    } 
    else { 
     console.log('will do model.get'); 
     model.get(dbfunctions.runSql); 
    } 
}); 

但现在的代码我没有工作我得到

ReferenceError: res is not defined 

有人可以解释我做错了什么?

回答

1

当您将db回调处理程序移至dbFunctions时,回调函数现在没有关闭路由器中间件函数,因此没有定义resreq对象。

一种方法来解决它是通过他们在手动

var dbfunctions = { 
    runSql: function (err, rows, req, res) { 
     if (err) { 
      res.status(500).send({error: 'Something failed!'}) 
     } 
     else { 
      res.json({data: rows}); 
     } 
    } 
} 
module.exports = dbfunctions ; 

router.js

var express = require('express'); 
var router = express.Router(); 
var model= require('../models/customers'); 
var dbfunctions = require('../libs/dbfunctions'); 

router.get('/:id?', function (req, res, next) { 
    res.header('content-type', 'application/json'); 

    if (req.params.id) { 

     model.getById(req.params.id, function (err, rows) { 
      if (err) { 

       res.json(err); 
      } 
      else { 
       res.json({data:rows}); 
      } 
     }); 
    } 
    else { 
     console.log('will do model.get'); 
     model.get(function(err,rows){ 
       dbfunctions.runSql(err, rows, req, res); 
     }); 
    } 
}); 
+0

感谢工作! – stackdave