A full-stack application template based on EdgeOne Pages and Next.js, supporting MySQL database connections, allowing you to deploy production-level applications without managing servers.
- π Serverless Architecture - Based on EdgeOne Pages Node Functions, no server management required
- ποΈ MySQL Integration - Built-in database connection pool and query executor
- β‘ Modern Frontend - Next.js 15 + React 19 + TypeScript
- π¨ Beautiful UI - Tailwind CSS 4 + Responsive Design
- π§ Out-of-the-Box - Preconfigured development environment and build process
- π± Mobile-First - Fully responsive design, supporting all devices
- Next.js 15.4.6 - React full-stack framework
- React 19.1.0 - User interface library
- TypeScript 5 - Type-safe JavaScript
- Tailwind CSS 4 - Utility-first CSS framework
- EdgeOne Pages - Edge computing platform
- Node Functions - Serverless function runtime
- MySQL2 - MySQL database driver
- ESLint - Code quality checker
- PostCSS - CSS postprocessor
- Turbopack - Fast build tool
- Node.js 18.0 or higher
- MySQL 5.7 or higher
- EdgeOne Pages account
# Clone the project
git clone <your-repo-url>
cd mysql-template
# Install dependencies
npm install
Create a .env.local
file and configure the database connection:
# Database configuration
DB_HOST=your-mysql-host
DB_PORT=3306
DB_USER=your-username
DB_PASSWORD=your-password
DB_NAME=your-database-name
# Start the development server
edgeone pages dev
# Access http://localhost:8088
# Build the production version
edgeone pages build
Endpoint: /db
Method: GET
Function: Executes MySQL query and returns the result
Response Format:
{
"success": true,
"data": [...],
"error": null,
"thisis": "get"
}
Example Request:
curl -X GET https://your-domain.com/db
Modify the SQL statement in the node-functions/db.js
file:
// Modify the query logic
const result = await executeQuery('SELECT * FROM your_table LIMIT 100');
The project uses a connection pool to manage database connections, supporting the following configurations:
const dbConfig = {
host: process.env.DB_HOST,
port: process.env.DB_PORT || 3306,
user: process.env.DB_USER,
password: process.env.DB_PASSWORD,
database: process.env.DB_NAME,
charset: 'utf8mb4',
timezone: '+08:00',
connectionLimit: 10,
acquireTimeout: 60000,
timeout: 60000,
reconnect: true
};
Ensure your MySQL database has the corresponding table structure. Example:
mysql-template/
βββ src/ # Source code directory
β βββ app/ # Next.js App Router
β β βββ layout.tsx # Root layout component
β β βββ page.tsx # Home page component
β β βββ globals.css # Global styles
β βββ components/ # React components
β β βββ ui/ # UI component library
β βββ lib/ # Utility functions
βββ node-functions/ # EdgeOne Pages functions
β βββ db.js # Database operation function
βββ public/ # Static resources
βββ package.json # Project configuration
βββ next.config.ts # Next.js configuration
βββ tailwind.config.js # Tailwind CSS configuration
βββ tsconfig.json # TypeScript configuration
Create a new .js
file in the node-functions/
directory:
export const onRequestGet = async (context) => {
// Handle GET request
return new Response(JSON.stringify({ message: "Hello World" }), {
headers: { 'Content-Type': 'application/json' }
});
};
export const onRequestPost = async (context) => {
// Handle POST request
const body = await context.request.json();
return new Response(JSON.stringify({ received: body }), {
headers: { 'Content-Type': 'application/json' }
});
};
The project uses Tailwind CSS 4, and you can add custom styles in src/app/globals.css
:
@tailwind base;
@tailwind components;
@tailwind utilities;
@layer components {
.custom-button {
@apply bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded;
}
}
Database Connection Failure
- Check environment variable configurations
- Confirm MySQL service status
- Verify network connection and firewall settings
Build Error
- Clean up
node_modules
and.next
directories - Reinstall dependencies:
npm install
- Check TypeScript type errors
API Call Failure
- Check EdgeOne Pages function deployment status
- View function log output
- Confirm database table structure
This project uses the MIT License - see the LICENSE file for details.