Loading......
下面我们针对上一篇文章数据库与服务器连接进行进一步的优化,我们在真实的项目开发中一都是数据库先建立连接,然后才是服务器端响应,而在上一篇中,由于异步请求问题导致服务器端相应完成后数据库端才建立连接(如下图);
这样会使用户在服务器相应完全是得不到数据,针对这一情况进行优化;
解决异步请求问题
首先我们先利用两个函数把 数据库服务 及 node服务 进行封装;具体操作如下:
javascript">const dbConnection = async () => {
return new Promise(async (resolve, reject) => {
try {
await sequelize.authenticate();
console.log("mysql Connection successful !!! ");
resolve();
} catch (error) {
console.error("Unable to connect to the database:", error);
reject(error);
}
});
};
javascript">const initServer = async () => {
return new Promise((resolve, reject) => {
const PORT = process.env.PORT || 8080;
app
.listen(PORT, () => {
console.log(`running http://localhost:${PORT}`);
resolve();
})
.on("error", (error) => {
console.log("error");
reject();
});
});
};
封装完毕后再构建一个主函数,在主函数中先调用 数据库服务 再调用 node服务 ,最后再调用这个主函数,这样在执行过程中就会按调用的先后顺序依次执行;
javascript">const main = async () => {
//启动数据库服务
await dbConnection();
//启动 node 服务
await initServer();
};
main();
这样在终端再启动服务,就会解决异步请求的问题;
app.js详细代码:
javascript">require("dotenv").config({ path: ".env" });
const express = require("express");
const app = express();
const { Sequelize } = require("sequelize");
const sequelize = new Sequelize(
process.env.DB_NAME,
process.env.DB_USERNAME,
process.env.DB_PASSWORD,
{
dialect: process.env.DB_DIALECT,
host: process.env.DB_HOST,
port: process.env.DB_PORT,
logging: false,
}
);
const dbConnection = async () => {
return new Promise(async (resolve, reject) => {
try {
await sequelize.authenticate();
console.log("mysql Connection successful !!! ");
resolve();
} catch (error) {
console.error("Unable to connect to the database:", error);
reject(error);
}
});
};
const initServer = async () => {
return new Promise((resolve, reject) => {
const PORT = process.env.PORT || 8080;
app
.listen(PORT, () => {
console.log(`running http://localhost:${PORT}`);
resolve();
})
.on("error", (error) => {
console.log("error");
reject();
});
});
};
const main = async () => {
//启动数据库服务
await dbConnection();
//启动 node 服务
await initServer();
};
main();
未完待续......