#node.js #node-mysql2
Вопрос:
Я пытаюсь включить статус моего сервера MySQL в ответ моего маршрутизатора.
health.js:
var express = require('express'); var router = express.Router(); const db = require('../database'); /* GET home page. */ router.get('/', async function(req, res, next) { var status = "nothing here yet"; await db.ping((err) =gt; { // Not working if(err) status = "Server is down!"; status = "MySQL Server is Active"; // Working //if(err) return res.status(503).send("Server down!") //return res.status(200).send("Server up and running!") }) res.status(200).send(status); }); module.exports = router;
database.js:
const mysql = require('mysql2'); module.exports = mysql.createConnection({ host: 'localhost', user: 'testdb_user', password: 'test' database: 'testdb' });
Доступ к маршруту с помощью приведенного выше кода всегда возвращает «здесь пока ничего» вместо фактического состояния базы данных.
Используя прокомментированный код внутри db.ping()
функции, я получаю правильный результат, что сервер либо работает, либо работает.
Я предполагаю, что я как-то перепутал это с концепцией асинхронности/ожидания, но я не уверен. Также нет примера, который я нашел при использовании db.ping()
вызова для установки переменной, которую я мог бы затем использовать вне функции (например, статус в моем случае). Как мне нужно изменить свой код выше, health.js
чтобы убедиться, что я могу правильно установить свою status
переменную, а затем передать ее в качестве ответа?
Комментарии:
1. Похоже, что ping основан на обратном вызове, а не на обещании, поэтому ожидание не будет делать то, что вы ожидаете.