Vis*_*aju 5 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);
Run Code Online (Sandbox Code Playgroud)
最后这里是错误发生的地方...... 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);
}
}
});
}
Run Code Online (Sandbox Code Playgroud)
在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);
Run Code Online (Sandbox Code Playgroud)
搜索.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);
}
}
});
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10089 次 |
| 最近记录: |