如何在Node.js中将数据从模型传递到路由器

如何在Node.js中将数据从模型传递到路由器,node.js,express,Node.js,Express,我是Node.js新手,正在尝试将一些数据从我的DB模型传递回路由器,但我无法找到解决方案。我有以下调用模型的路由文件: 路由文件: var express = require('express'); var router = express.Router(); var db = require('../db'); var customers = require('../models/customers'); db.connect(function(err) { if (err) { c

我是Node.js新手,正在尝试将一些数据从我的DB模型传递回路由器,但我无法找到解决方案。我有以下调用模型的路由文件:

路由文件:

var express = require('express');
var router = express.Router();
var db = require('../db');
var customers = require('../models/customers');

db.connect(function(err) {

if (err) {
  console.log('Unable to connect to MySQL.')
  process.exit(1)
  }
});

router.post('/', function(req, res) {
    customers.checkPassword(req.body.cust_id, req.body.password);
    res.sendStatus(200);
});
var db = require('../db.js');

module.exports.checkPassword = function(cust_id, password) {
    var sql = "SELECT Password FROM Shop.customers WHERE ID =" + cust_id;

    db.get().query(sql, function (err, res, fields) {

        result = res[0].Password;

        if (err) throw err
    });
};
模型文件:

var express = require('express');
var router = express.Router();
var db = require('../db');
var customers = require('../models/customers');

db.connect(function(err) {

if (err) {
  console.log('Unable to connect to MySQL.')
  process.exit(1)
  }
});

router.post('/', function(req, res) {
    customers.checkPassword(req.body.cust_id, req.body.password);
    res.sendStatus(200);
});
var db = require('../db.js');

module.exports.checkPassword = function(cust_id, password) {
    var sql = "SELECT Password FROM Shop.customers WHERE ID =" + cust_id;

    db.get().query(sql, function (err, res, fields) {

        result = res[0].Password;

        if (err) throw err
    });
};
我的问题是:如何将查询结果
密码
传递回我的
路由
文件,以便执行以下操作:

console.log('Password is', result);

非常感谢您在这方面提供的帮助。

您可以将凭证控制委托给数据库文件中的另一个函数,在该函数中,您可以决定在成功和失败查找此类数据时要返回何种数据。然后,您可以从调用它的位置访问它

我会用承诺

模型文件

module.exports.checkPassword = function(cust_id, password) {
  return new Promise(function(resolve, reject) {
    const sql = "SELECT Password FROM Shop.customers WHERE ID =" + cust_id;
    db.get().query(sql, function (err, res, fields) {
        if (err) return reject(err)
        result = res[0].Password;
        return resolve(result);
    });
  });  
};
var express = require('express');
var router = express.Router();
var db = require('../db');
var customers = require('../models/customers');

db.connect(function(err) {

if (err) {
  console.log('Unable to connect to MySQL.')
  process.exit(1)
  }
});

router.post('/', function(req, res) {
    customers.checkPassword(req.body.cust_id, req.body.password)
        .then((result) => {
            // DO: something with result
            res.status(200).send();
        })
        .catch(console.log); // TODO: Handle errors
});
路由文件

module.exports.checkPassword = function(cust_id, password) {
  return new Promise(function(resolve, reject) {
    const sql = "SELECT Password FROM Shop.customers WHERE ID =" + cust_id;
    db.get().query(sql, function (err, res, fields) {
        if (err) return reject(err)
        result = res[0].Password;
        return resolve(result);
    });
  });  
};
var express = require('express');
var router = express.Router();
var db = require('../db');
var customers = require('../models/customers');

db.connect(function(err) {

if (err) {
  console.log('Unable to connect to MySQL.')
  process.exit(1)
  }
});

router.post('/', function(req, res) {
    customers.checkPassword(req.body.cust_id, req.body.password)
        .then((result) => {
            // DO: something with result
            res.status(200).send();
        })
        .catch(console.log); // TODO: Handle errors
});
使用异步/等待

router.post('/', async function(req, res) {
    try {
      const result = await customers.checkPassword(req.body.cust_id, req.body.password)
      // DO: something with the result
    } catch (e) {
      console.log(e); // TODO: handle errors
    } finally {
      res.status(200).send();
    }
});
我假设
console.log('Password is',result)
仅用于测试,显然您不应该记录密码!我还建议将路由的callbabck移到另一个模块中,以提高代码的可编性

您还可以在npm上找到有用的模块,它基本上是围绕mysql的承诺包装器