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函数正在返回error
并result
两者都作为第一个参数。 您必须将此callback(row)
更改为callback(null, row)
来处理错误和结果,如下所示。
注意:
node js
callback函数中的最佳做法是,第一个参数应该返回一个错误(如果没有错误,则返回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); }); }); });
- 与护照使用WebSocket
- JavaScript减less不能处理math函数?
- Grunt – 如何从外部项目运行常见的外部任务
- Express.js + body-parser:POST请求中的空req.body
- 带有NodeJS GET请求的AngularJS失败 – “Access-Control-Allow-Headers不允许Access-Control-Allow-Headers”
- “实施我。 未知的标准input文件types!“与flickrapi错误
- 节点js:如何获取文件签名标题而不是MIMEtypes?
- 如何在ExpressJS中使用Q的承诺?
- 有了Facebook的EventEmitter,有没有办法让迟到的听众收到已经发出的事件?