【问题标题】:How to return results from MySQL in HAPI如何在 HAPI 中从 MySQL 返回结果
【发布时间】:2020-06-24 10:24:22
【问题描述】:

我是 Node 和 HAPI 的新手,正在学习有关基本 CRUD API 的教程。

我正在尝试执行一个简单的 SQL 查询以从数据库中检索几行并返回请求中的数据。

// routes.js
'use strict';
const Path = require('path');
const dbconn = require('./models');
const Home = require ('./controllers/home');

module.exports = [
    {
        method: 'GET',
        path: '/',
        handler: Home,
        config: {
            description: 'Gets all the notes available'
        }
    },

];

// models.js
var db = require('mysql');

const db_name = 'nodejstest';
const db_user = 'nodejstest';
const db_pass = 'n0dejstest()';
const db_host = 'localhost';

var dbconn = db.createConnection({
    host: db_host,
    user: db_user,
    password: db_pass,
    database: db_name
});

dbconn.connect(function(err) {
    if (err) {
        console.error('[mysql error]' + err.stack);
        return;
    }
});


module.exports = dbconn;

// home.js

'use strict';

const dbconn = require('../models');

function getAllNotes(callback) {
    dbconn.query('SELECT * FROM note', [], function (err, results) {
        if (err) {
            throw err;
        }

        console.log(results);

        return callback(results);
    })
}

module.exports = async (request, h) => {
    return getAllNotes(function(results) {
        return {
            data: {
                notes: results
            },
            page: 'Home -- Notes Board',
            description: 'Welcome to my Notes Board'
        };

    })
    
}

在 console.log 中,我看到数据库结果被正确记录,所以我知道 db 正在返回预期的结果,但我不知道如何让 Hapi 等到 db 有结果。

我使用的是 Node v12.18.1 和 HAPI 19.1.1

【问题讨论】:

    标签: node.js hapi


    【解决方案1】:

    Home 中的 async 函数未从回调中返回值。您正在返回未定义的调用 getAllNotes 的结果。您似乎对回调和异步/承诺的工作方式感到困惑。您必须将查询的回调包装在 Promise 中。

    function getAllNotes() {
      return new Promise((resolve, reject) => {
        dbconn.query('SELECT * FROM note', [], function (err, results) {
          if (err) {
            return reject(error)
          }
    
          console.log(results);
    
          return resolve(results);
        })
      })
    }
    
    module.exports = async (request, h) => {
      // maybe add some error handling here
      const results = await getAllNotes();
      return {
        data: {
          notes: results
        },
        page: 'Home -- Notes Board',
        description: 'Welcome to my Notes Board'
      };
    }
    

    【讨论】:

    • 谢谢!这非常有效,感谢您解释为什么它也不起作用:-)
    猜你喜欢
    • 2019-04-14
    • 1970-01-01
    • 2014-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-24
    相关资源
    最近更新 更多