callback不是节点js中的函数

我正在尝试一个简单的操作,将导致数据库中的特定用户的详细信息。 池数据库和所有其他连接工作完美,但callback不起作用。 我在这里做错了什么?

以下是我使用的代码。

db_crud.js

var express = require('express'); var app = express(); var crud = require('./routes/crud_op_new.js'); var search = require('./routes/search.js'); var connection; var result; app.get('/search',(req,res)=>{ crud.connection(function (con) { search.getuser(con,req.param('name'),result); res.send(result); }); }); app.listen(8003); 

最后,这里是发生错误的地方… search.js

 exports.getuser = function(connection,req,callback){ console.log("GET Request iniciated"); connection.query("select * from user,addr where name=? and user.id=addr.e_id",[req],(err,row)=>{ if(err){ callback("DB ERROR: "+err); } else { if(row.length==0){ callback("No Records found"); } else { callback(row); } } }); } 

db_crud将把凭证发送到search.js,在这里调用callback来发送结果。 crud_op_new.js创build数据库池连接,并在variablescon中。

正如Jaromanda X在答案中所提到的, result只是声明和未分配,应该是一个callbackfunction

此外, search.js的callback函数正在返回errorresult两者都作为第一个参数。 您必须将此callback(row)更改为callback(null, row)来处理错误和结果,如下所示。

注意: node jscallback函数中的最佳做法是,第一个参数应该返回一个错误(如果没有错误,则返回null ),然后剩余的参数可以是返回值。

db_crud.js

 var express = require('express'); var app = express(); var crud = require('./routes/crud_op_new.js'); var search = require('./routes/search.js'); var connection; app.get('/search',(req,res)=>{ crud.connection(function (con) { search.getuser(con,req.param('name'), function(err, result) { if(err) { res.status(501).send(err); } else { res.send(result); } }); }); }); app.listen(8003); 

search.js

 exports.getuser = function(connection,req,callback){ console.log("GET Request iniciated"); connection.query("select * from user,addr where name=? and user.id=addr.e_id",[req],(err,row)=>{ if(err){ callback("DB ERROR: "+err); } else { if(row.length==0){ callback("No Records found"); } else { callback(null, row); } } }); } 

你调用你的函数search.getuser(con,req.param('name'),result);result不是一个函数,它是未定义的…一个callback需要是一个函数,所以它可以被callback

这应该工作

 app.get('/search',(req,res)=>{ crud.connection(function (con) { // vvvvvvvvvvvvvvv this is the callback function search.getuser(con,req.param('name'),function(result) { res.send(result); }); }); });