Javascript JS:导出的函数无法返回真/假
我在另一个文件中有一个函数,该函数假设检查数据库中是否有管理员,如果没有创建管理员。如果数据库中有一个管理员(已创建或已创建),则返回true,否则将返回falseJavascript JS:导出的函数无法返回真/假,javascript,express,Javascript,Express,我在另一个文件中有一个函数,该函数假设检查数据库中是否有管理员,如果没有创建管理员。如果数据库中有一个管理员(已创建或已创建),则返回true,否则将返回false /*AdminUser.js*/ const Admin = require('../models/admin'); const mongoose = require('mongoose'); module.exports = { validate: function() { Admin.getAdminByRealID(
/*AdminUser.js*/
const Admin = require('../models/admin');
const mongoose = require('mongoose');
module.exports = {
validate: function() {
Admin.getAdminByRealID("1212", (error, admin) => {
if (admin) {
console.log("Main admin is Booted");
return true;
} else {
console.log("Booting main admin");
let newAdmin = new Admin({
ID: "1212",
account: {
username: "Admin",
password: "1212",
token: "Admin"
},
name: {
first: "Admin",
last: "Delta"
},
communication: {
email: "delta@example.com",
phone: "1212"
}
});
Admin.addAdmin(newAdmin, (error, admin) => {
if (error) {
console.log("Admin reboot failed");
return false;
} else {
console.log("Admin have been initialized");
return true;
}
});
}
});
}
}
在主应用程序中,我有以下内容:
if (AdminUser.validate()) {
app.listen(port, () => {
console.log('Server started on port: ' + port);
});
} else {
console.log('Fail to run Server');
process.exit();
}
函数(.validate)始终返回“未定义”对象,服务器无法启动。有人能解释一下为什么返回值不是真/假吗
函数(.validate)会打印“主管理员已启动”,我猜它会在下一行返回真值
使用app=express() AdminUser.validate()
确实返回undefined
。如果查看该函数的主体,可以看到它通过Admin.addAdmin
和Admin.getAdminByRealID
的回调接收结果。这意味着要在函数体之外处理这些结果,您应该向validate
方法提供回调参数。这种技术对于节点异步编程来说是相当标准的(虽然Promises和await
是更现代的方法,但这超出了本答案的范围)
你会这样称呼它:
AdminUser.validate((ok)=> {
if(ok){
app.listen(port, () => {
console.log('Server started on port: ' + port);
});
} else {
console.log('Fail to run Server');
process.exit(1);
}
});
AdminUser.validate()
确实返回undefined
。如果查看该函数的主体,可以看到它通过Admin.addAdmin
和Admin.getAdminByRealID
的回调接收结果。这意味着要在函数体之外处理这些结果,您应该向validate
方法提供回调参数。这种技术对于节点异步编程来说是相当标准的(虽然Promises和await
是更现代的方法,但这超出了本答案的范围)
你会这样称呼它:
AdminUser.validate((ok)=> {
if(ok){
app.listen(port, () => {
console.log('Server started on port: ' + port);
});
} else {
console.log('Fail to run Server');
process.exit(1);
}
});
您的validate()
函数是异步的:它在执行时不返回任何内容(确切地说,因为它没有return
指令)。相反,它查询数据库,并在完成时执行某些操作
因此,在主应用程序中,您不能只调用validate()
,期望得到结果;相反,您必须对其进行设置,以便当validate()
完成时,您的应用程序可以继续运行。实现这一点的经典方法是使用回调。比如:
validate: function(callback) {
...
if (error) {
console.log("Admin reboot failed");
callback(false);
} else {
console.log("Admin have been initialized");
callback(true);
}
...
}
AdminUser.validate(function afterValidation(isValid) {
if (isValid) {
app.listen(port, () => {
console.log('Server started on port: ' + port);
});
} else {
console.log('Fail to run Server');
process.exit();
}
});
主应用程序中的代码片段可能类似于:
validate: function(callback) {
...
if (error) {
console.log("Admin reboot failed");
callback(false);
} else {
console.log("Admin have been initialized");
callback(true);
}
...
}
AdminUser.validate(function afterValidation(isValid) {
if (isValid) {
app.listen(port, () => {
console.log('Server started on port: ' + port);
});
} else {
console.log('Fail to run Server');
process.exit();
}
});
基本思想是,在异步函数完成后,通过传递一个回调函数来执行它,让它做一些事情。您的validate()
函数是异步的:它在执行时不返回任何内容(确切地说,因为它没有返回指令)。相反,它查询数据库,并在完成时执行某些操作
因此,在主应用程序中,您不能只调用validate()
,期望得到结果;相反,您必须对其进行设置,以便当validate()
完成时,您的应用程序可以继续运行。实现这一点的经典方法是使用回调。比如:
validate: function(callback) {
...
if (error) {
console.log("Admin reboot failed");
callback(false);
} else {
console.log("Admin have been initialized");
callback(true);
}
...
}
AdminUser.validate(function afterValidation(isValid) {
if (isValid) {
app.listen(port, () => {
console.log('Server started on port: ' + port);
});
} else {
console.log('Fail to run Server');
process.exit();
}
});
主应用程序中的代码片段可能类似于:
validate: function(callback) {
...
if (error) {
console.log("Admin reboot failed");
callback(false);
} else {
console.log("Admin have been initialized");
callback(true);
}
...
}
AdminUser.validate(function afterValidation(isValid) {
if (isValid) {
app.listen(port, () => {
console.log('Server started on port: ' + port);
});
} else {
console.log('Fail to run Server');
process.exit();
}
});
其基本思想是,在异步函数完成后,通过传递回调函数来执行它,从而给它一些事情