在现代的前端开发中,使用 Vue3 搭配 Element Plus 进行组件化开发已经成为一种常见的实践。最近,我在一个项目中需要根据数据库表结构动态生成表格代码,这让我经历了一次从 MySQL 到 SQL Server 的旅程,并学习了如何使用 ejs 模版引擎来生成代码。在这篇博客中,我将介绍如何使用 mysql2/promise 和 mssql 库连接数据库,以及如何利用 ejs 动态生成代码。
我们需要在 Vue3 项目中封装一个 组件,该组件的表格列(tableColumns)需要根据数据库表结构动态生成。为了实现这一点,我搭建了一个 Node.js 服务,通过查询数据库表结构来生成表格代码。
setup 语法和 Element Plus 组件库。首先,创建一个新的 Node.js 项目并安装所需的库:
mkdir dynamic-table-generator cd dynamic-table-generator npm init -y npm install express ejs mssql 由于我们的数据库是 SQL Server,我们使用 mssql 库来进行连接:
// db.js const sql = require('mssql'); const config = { user: 'your_username', password: 'your_password', server: 'your_server', database: 'your_database', options: { encrypt: true, // 使用 SSL 连接 enableArithAbort: true } }; const connectToDatabase = async () => { try { await sql.connect(config); console.log('Connected to the database!'); } catch (err) { console.error('Database connection failed: ', err); } }; module.exports = { connectToDatabase, sql }; 我们需要查询数据库以获取表的结构信息:
// getTableStructure.js const { sql } = require('./db'); const getTableStructure = async (tableName) => { try { const result = await sql.query`SELECT COLUMN_NAME, DATA_TYPE FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = ${tableName}`; return result.recordset; } catch (err) { console.error('Error fetching table structure: ', err); } }; module.exports = getTableStructure; 使用 ejs 动态生成 Vue3 表格代码:
注意 其中用<%- %> 代替 <%= %> 来保留 tsx中的<> 尖括号。
// generateTemplate.js const ejs = require('ejs'); const fs = require('fs'); const generateTemplate = (columns) => { const template = ` `; const result = ejs.render(template, { columns }); fs.writeFileSync('output.vue', result); }; module.exports = generateTemplate; 搭建一个 Express 服务,处理生成代码的请求:
// server.js const express = require('express'); const { connectToDatabase } = require('./db'); const getTableStructure = require('./getTableStructure'); const generateTemplate = require('./generateTemplate'); const app = express(); const PORT = 3000; app.get('/generate-template', async (req, res) => { const tableName = req.query.table; const columns = await getTableStructure(tableName); generateTemplate(columns); res.send('Template generated successfully!'); }); connectToDatabase().then(() => { app.listen(PORT, () => { console.log(`Server is running on http://localhost:${PORT}`); }); }); 通过以上步骤,我们成功地搭建了一个 Node.js 服务,能够根据 SQL Server 数据库中的表结构动态生成 Vue3 表格代码。我们使用 mssql 库连接数据库,ejs 模板引擎生成代码,并结合 Vue3 和 Element Plus 实现了组件化开发。希望这篇博客能帮助到那些需要动态生成代码的开发者们。