如何在 HAPI 中从 MySQL 得到 return 结果
How to return results from MySQL in HAPI
我是 Node 和 HAPI 的新手,正在学习有关基本 CRUD 的教程API。
我正在尝试执行一个简单的 SQL 查询以从数据库中检索几行并 return 请求中的数据。
// 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 中,我看到数据库结果被正确记录,所以我知道数据库正在 returning 预期的结果,但我不知道如何让 Hapi 等到那里是数据库的结果。
我在 Node v12.18.1 & HAPI 19.1.1
您在 Home
中的 async
函数没有从回调中返回值。您正在返回未定义的调用 getAllNotes
的结果。您似乎对回调和 async/promises 的工作方式感到困惑。您必须将回调包装到 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'
};
}
我是 Node 和 HAPI 的新手,正在学习有关基本 CRUD 的教程API。
我正在尝试执行一个简单的 SQL 查询以从数据库中检索几行并 return 请求中的数据。
// 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 中,我看到数据库结果被正确记录,所以我知道数据库正在 returning 预期的结果,但我不知道如何让 Hapi 等到那里是数据库的结果。
我在 Node v12.18.1 & HAPI 19.1.1
您在 Home
中的 async
函数没有从回调中返回值。您正在返回未定义的调用 getAllNotes
的结果。您似乎对回调和 async/promises 的工作方式感到困惑。您必须将回调包装到 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'
};
}