回调不是节点js中的函数

时间:2017-01-04 05:00:29

标签: javascript node.js

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

以下是我使用的代码。

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,此处调用回调以发送结果。 crud_op_new.js创建数据库池连接,并且处于变量con。

2 个答案:

答案 0 :(得分:4)

正如答案中Jaromanda X所述,result只是声明和取消分配,应该是回调function

此外,search.js中的回调作为第一个参数返回errorresult。您必须将此callback(row)更改为callback(null, row)才能处理错误和结果,如下所示。

  

注意:node js回调函数的最佳实践是第一个参数   应该返回一个错误( 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);
   }
  }
 });
}

答案 1 :(得分:3)

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

这应该有效

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);
    });
  });
});