[英]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
的回调返回error
, result
作为第一个参数。 您必须将此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.