我的路由器上有一个回调函数,并且运行良好,但是我想要不重复我的回调函数来管理一个函数中的sql错误,然后我移动到外部文件
在将我的回调函数移动到外部文件之前:
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
有人可以解释我做错了什么吗?
答案 0 :(得分:1)
当您将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);
});
}
});