回调函数移动到外部js,不起作用
问题描述:
我在我的路由器上有一个回调函数,并且运行良好,但就像我想要的不重复我的回调函数来管理一个函数中的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
有人可以解释我做错了什么?
答
当您将db回调处理程序移至dbFunctions时,回调函数现在没有关闭路由器中间件函数,因此没有定义res
和req
对象。
一种方法来解决它是通过他们在手动
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);
});
}
});
感谢工作! – stackdave