2017-08-05 75 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