我已将mysql.js中的函数返回为:
function myFunction(resourceIdentifiers,callback){
dbconnection.execute( function(err,response) {
response.query('call SP_ExposePricingDetailforUI('
+ resourceIdentifiers + ')'
,function (err, rows, fields) {
console.log(rows);
});
}
);
return rows;
}
并尝试在另一个脚本文件restservice.js中将其称为:
mysql.myFunction(resourceIdentifiers , function(err,rows) {
console.log(rows);
}
但是因为函数myFunction是Undefined而得到错误。
答案 0 :(得分:1)
如果mysql.myFunction
为undefined
,那么您可能实际上并未将其导出:
function myFunction(resourceIdentifiers, callback){
// ...
}
exports.myFunction = myFunction;
默认情况下,函数和变量声明对模块是“ private ”。只有您明确导出的成员才能从其他模块访问。
您也无法使用return rows;
。异步代码是事件驱动的,不会等待,return
需要它。
myFunction
已经有一个callback
参数,您正在为该值传递function
。你只需要打电话:
// ...
function (err, rows, fields) {
callback(err, rows);
}
// ...
连接时也至少应该escape resourceIdentifiers
。
但是,通常更好的方法是使用占位符(?
)和.query()
的可选第二个参数:
response.query(
'call SP_ExposePricingDetailforUI(?)',
[ resourceIdentifiers ],
function (err, rows, fields) {
callback(err, rows);
}
);
答案 1 :(得分:0)
您只需要在response.query的结果中回调。这样的事情。
mysql.js:
function myFunction(resourceIdentifiers,callback){
dbconnection.execute( function(err,response) {
response.query('call SP_ExposePricingDetailforUI('
+ resourceIdentifiers + ')'
,function (err, rows, fields) {
callback(err, { rows: rows, fields: fields});
});
}
);
}
module.exports.myFunction = myFunction;
restservice.js:
mysql.myFunction(resourceIdentifiers , function(err,resp) {
console.log(resp.rows);
}
更新 - 删除了我第一次错过的返回行语句。