Javascript 导入的数据库函数未在Expressjs中的路由内返回值

Javascript 导入的数据库函数未在Expressjs中的路由内返回值,javascript,node.js,express,Javascript,Node.js,Express,我正在尝试用Expressjs制作一个restapi。当我开始使用所有路由时,我只使用一个主文件,现在我将这些路由、数据库连接和数据库方法分离到它们的on文件中 login-db.js const{showMessage,淋浴ror}=require(“../showMessage handler”); const connection=require(“../db/db”); module.exports={ 登录:函数(用户名、密码){ 让r; connection.query( “从用户名

我正在尝试用Expressjs制作一个restapi。当我开始使用所有路由时,我只使用一个主文件,现在我将这些路由、数据库连接和数据库方法分离到它们的on文件中

login-db.js
const{showMessage,淋浴ror}=require(“../showMessage handler”);
const connection=require(“../db/db”);
module.exports={
登录:函数(用户名、密码){
让r;
connection.query(
“从用户名=?和密码=?”的用户中选择*;,[username,password],
(错误、行、字段)=>{
如果(错误)
淋浴错误(error.code,“无法检索用户”);
r=行数.length!==0?真:假;
showMessage(r);
}
);
返回r;
}
}
这应该有效(或无效):

login.js

const { showMessage, showError } = require("../show-message-handler");
const router = require("express").Router();

const { login } = require("../db-methods/login-db");

router.post("/", (req, res) => {
  let r = false;
  showMessage("Before login: => " + r);
  login(req.body.username, req.body.password, function(error, result) {
    showMessage("After login: => " + result);
    res.send(String(result));
  });
});

module.exports = router;
问题是,查询操作是异步过程,但是您立即返回了
r
,应该等待查询完成并使用回调

const { showMessage, showError } = require("../show-message-handler");
const router = require("express").Router();

const { login } = require("../db-methods/login-db");

router.post("/", (req, res) => {
  let r = false;
  showMessage("Before login: => " + r);
  login(req.body.username, req.body.password, function(error, result) {
    showMessage("After login: => " + result);
    res.send(String(result));
  });
});

module.exports = router;