我是Node.js的新手,正在尝试将一些数据从我的数据库模型传递回路由器,但是我找不到解决方案。我有以下调用模型的路由文件:
路由文件:
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
});
};
我的问题是:如何将查询的结果Password
传递回我的Route
文件,以便执行此操作:
console.log('Password is', result);
我对此表示感谢。
答案 0 :(得分:1)
我会用诺言
模型文件
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上找到有用的promise-module模块,基本上是mysql的Promise包装器。
答案 1 :(得分:0)
您可以将凭证控件委派给数据库文件中的另一个函数,在该函数中,您可以决定在查找成功或失败后想要返回的数据类型。然后,您可以从调用它的地方访问它。