hapi.js 与 mysql 连接未在浏览器上显示值
hapi.js connected with mysql is not showing the value's on browser
我试图使用 hapi.js 从 mysql 中获取一些数据的列表。但是我收到了这个错误
Error: method did not return a value, a promise, or throw an error
但我可以在我的控制台中看到这些数据。
[ RowDataPacket { id: 1, code: 'test', description: 'bla', format: '12' },
RowDataPacket { id: 2, code: 'test2', description: 'test', format: '15' } ]
这是我的处理程序代码:
exports.getInfo = async (request, h) => {
try {
pool.query(`SELECT * FROM test`, (err, result) => {
if (err) throw err;
console.log(result);
return h.response(result);
});
} catch (e) {
if (e.response) {
switch (e.response.status) {
case 404: return Boom.notFound();
default: return Boom.failedDependency();
}
} else {
return Boom.failedDependency();
}
}
};
这是 promise 的问题,我猜 mysql 没有 return 任何 promise。我该如何解决这个问题?
您已经在使用异步运算符,这意味着您可以在代码中使用 async/await 方法。
我假设您的 pool.query
方法正在返回一个承诺,因此您的代码可能是这样的。
exports.getInfo = async (request, h) => {
try {
const result = await pool.query(`SELECT * FROM test`);
return result;
} catch (e) {
if (e.response) {
switch (e.response.status) {
case 404:
return Boom.notFound();
default:
return Boom.failedDependency();
}
} else {
return Boom.failedDependency();
}
}
};
如果没有,那么您可以将 pool.query
方法转换为 Promise。
const QueryResult = (query) => {
return new Promise((resolve, reject) => {
pool.query(`SELECT * FROM test`, (err, result) => {
if (err) return reject(err);
return resolve(result)
});
})
}
exports.getInfo = async (request, h) => {
try {
const result = await QueryResult(`SELECT * FROM test`);
return result;
} catch (e) {
if (e.response) {
switch (e.response.status) {
case 404:
return Boom.notFound();
default:
return Boom.failedDependency();
}
} else {
return Boom.failedDependency();
}
}
};
我试图使用 hapi.js 从 mysql 中获取一些数据的列表。但是我收到了这个错误
Error: method did not return a value, a promise, or throw an error
但我可以在我的控制台中看到这些数据。
[ RowDataPacket { id: 1, code: 'test', description: 'bla', format: '12' }, RowDataPacket { id: 2, code: 'test2', description: 'test', format: '15' } ]
这是我的处理程序代码:
exports.getInfo = async (request, h) => {
try {
pool.query(`SELECT * FROM test`, (err, result) => {
if (err) throw err;
console.log(result);
return h.response(result);
});
} catch (e) {
if (e.response) {
switch (e.response.status) {
case 404: return Boom.notFound();
default: return Boom.failedDependency();
}
} else {
return Boom.failedDependency();
}
}
};
这是 promise 的问题,我猜 mysql 没有 return 任何 promise。我该如何解决这个问题?
您已经在使用异步运算符,这意味着您可以在代码中使用 async/await 方法。
我假设您的 pool.query
方法正在返回一个承诺,因此您的代码可能是这样的。
exports.getInfo = async (request, h) => {
try {
const result = await pool.query(`SELECT * FROM test`);
return result;
} catch (e) {
if (e.response) {
switch (e.response.status) {
case 404:
return Boom.notFound();
default:
return Boom.failedDependency();
}
} else {
return Boom.failedDependency();
}
}
};
如果没有,那么您可以将 pool.query
方法转换为 Promise。
const QueryResult = (query) => {
return new Promise((resolve, reject) => {
pool.query(`SELECT * FROM test`, (err, result) => {
if (err) return reject(err);
return resolve(result)
});
})
}
exports.getInfo = async (request, h) => {
try {
const result = await QueryResult(`SELECT * FROM test`);
return result;
} catch (e) {
if (e.response) {
switch (e.response.status) {
case 404:
return Boom.notFound();
default:
return Boom.failedDependency();
}
} else {
return Boom.failedDependency();
}
}
};