簡體   English   中英

回調不是節點js中的函數

[英]callback is not a function in 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。

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

你調用你的函數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);
    });
  });
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM