Я печатаю SQL-запросы, выполненные в моем приложении, используя приведенный ниже код
var chalk = require('chalk');
module.exports = (app) => {
var connector = app.datasources.mysqlDs.connector;
connector.observe('after execute', function(ctx, next) {
console.info(chalk.green(ctx.req.sql));
next();
});
}
Приведенный выше код печатает sql-запрос в консоли следующим образом:
SELECT `users`.* FROM `users` WHERE `users`.`id` = 1 LIMIT 1
Мне интересно напечатать время, необходимое для выполнения запроса sql.
Приложения Ruby on rails выводят запрос sql вместе с временем, как показано ниже.
User Load (0.2ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 1 LIMIT 1
Есть ли способ добиться этого в loopback 3?
Я боюсь, что LoopBack не предоставляет информацию о времени из коробки. Вы можете использовать перехватчики before execute
и after execute
для самостоятельного сбора данных о времени.
module.exports = (app) => {
var connector = app.datasources.mysqlDs.connector;
connector.observe('before execute', function(ctx, next) {
// store the start time in the context
ctx.__started = process.hrtime();
next();
});
connector.observe('after execute', function(ctx, next) {
// compute the time difference as [seconds, nanoseconds]
const delta = process.hrtime(ctx.__started);
// convert the two-part value into number of milliseconds elapsed
// and round it to a single decimal place
const durationInMs = 10 * Math.round((delta[0]*1000 + delta[1]/1e6)/10);
console.info('(%s ms) %s', durationInMs, chalk.green(ctx.req.sql));
next();
});
}