Как передать данные с модели на маршрутизатор в Node.js - PullRequest
0 голосов
/ 01 сентября 2018

Я новичок в 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);

Я ценю любую помощь в этом.

Ответы [ 2 ]

0 голосов
/ 01 сентября 2018

Я бы использовал обещание

Файл модели

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); только для проверки, очевидно, вы никогда не должны регистрировать пароль! Также я предлагаю для перемещения колбабка маршрутов сделать другой модуль, чтобы улучшить кодируемость кода.

Вы также можете найти полезный модуль promise-module на npm, в основном оболочку обещаний вокруг mysql.

0 голосов
/ 01 сентября 2018

Вы можете делегировать управление учетными данными другой функции в вашем файле БД, где вы можете решить, какие данные вы хотите вернуть в случае успеха и неудачи при поиске таких данных. Затем вы можете получить к нему доступ, откуда вы звоните.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...