nodeJS+express+mysql模块封装之服务器渲染小demo

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: nodeJS+express+mysql模块封装之服务器渲染小demo

nodeJS+express+mysql模块封装之服务器渲染小demo

  1. 创建一个小项目
    npm init
  2. 下载相关中间件(根据package.js来下载)
  3. package.js
  4. 目录结构
  5. index.js代码
const express = require('express');
const path = require('path');
const template = require('art-template');
const bodyParser = require('body-parser');
const router = require('./router.js')
const app = new express();
// 启动静态
app.use('/static', express.static(path.join(__dirname, 'public')))
// 设置模板引擎
// 设置模板 引擎的路径
app.set('views',path.join(__dirname,'views'));
// 设置模板引擎
app.set('view engine','art');
// 使express 兼容 art-template 模引擎
app.engine('art',require('express-art-template'));
app.use(bodyParser.urlencoded({ extended: false}));
app.use(bodyParser.json());
// 配置路由
app.use(router);
// 监听端口
const server = app.listen(8081,  ()=> {
    const host = server.address().address
    const port = server.address().port
    console.log("应用实例,访问地址为 http://%s:%s", host, port)
  })
  1. 利用回调函数的性质完成db.js:
const mysql  = require('mysql');
exports.base = (sql,data,callback) => {
    const connection = mysql.createConnection({
        host:'主机地址',
        user:'root',
        password:'你的mysql密码',
        database:'book'
    });
    connection.connect();
    connection.query(sql,data,function(error,results,fields){
        if(error) throw error;
        callback(results);
    })
    connection.end();
}
  1. 建立router.js路由模块(这里以图书管理为例):
/**
 * 路由模块
 */
 const express = require('express');
 const router = express.Router();
 const service = require('./serveice.js')
//  路由处理
 router.get('/',service.showIndex);
 router.get('/toBook',service.toAddBook);
 router.post('/addBook',service.addBook);
 router.get('/toEditBook',service.toEditBook);
 router.post('/editBook',service.editBook);
 router.get('/deleteBook',service.deleteBook)
//  router.get('/dBook',service.deleteBook)
 module.exports = router;
  1. 业务层抽离,专心业务的书写,建立serveice.js业务模块
/**
 * 业务模块(处理具体的业务)
 */
const data = require('./data.json');
const path = require('path');
const db = require('./db.js')
const fs = require('fs');
// 自动生成图书编号
let maxBookCode = ()=>{
    let arr= [];
    data.forEach((item) => {
        arr.push(item.id);
    });
    return Math.max.apply(null,arr);
}
//  渲染主页面
exports.showIndex = (req,res) => {
    let sql = 'select * from book';
    db.base(sql,null,(result) => {
        res.render('index',{list:result})
    });
}
exports.toAddBook = (req,res)=>{
    res.render('addbook',{})
}
exports.addBook = (req,res)=>{
    // 获取表单数据
    let info = req.body;
    console.log(info)
    let book = {};
    for(let key in info){
        book[key] = info[key];
    }
    let sql = 'insert into book set ?';
    db.base(sql,book,(result) => {
        // console.log(result);
        if(result.affectedRows >= 1){
            res.redirect('/');
        }
    })
}
exports.toEditBook= (req,res)=>{
    let id = req.query.id;
    let sql = "select * from book where id = ?";
    let data = [id];
    db.base(sql,data,(result) => {
        res.render('editBook',result[0]);
    })
}
exports.editBook= (req,res) => {
    let info = req.body;
    console.log(info.description);
    let sql = "update book set name=?,author=?,category=?,description=? where id=?";
    let data = [info.name,info.author,info.category,info.description,info.id];
    db.base(sql,data,(result) => {
        if(result.affectedRows >= 1){
            res.redirect('/');
        }
    });
}
exports.deleteBook = (req,res) => {
    let id = req.query.id;
    let sql = `
            delete from book where id = ?; 
            `;
    let data = [id];
    db.base(sql,data,(result)=>{
        if(result.affectedRows >= 1){
            res.redirect('/');
        }
    })
}
// exports.dBook = (req,res) => {
//     let id = req.query.id;
//     let sql = "ALTER TABLE book ADD id INT NOT NULL PRIMARY KEY AUTO_INCREMENT FIRST;"
// }
  1. 数据交互采用的art-template
  • 目录结构
    -
  1. 主页面,index.art:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>图书馆里系统</title>
    <link rel="stylesheet" type="text/css" href="/static/css/style.css">
</head>
<body>
    <div class="title">图书馆里系统 <a href="/toBook">添加图书</a></div>
    <div class="content">
        <table cellpadding = "0" cellsapcing = "0">
            <thead>
                <tr>
                    <th>编号</th>
                    <th>名称</th>
                    <th>作者</th>
                    <th>类别</th>
                    <th>描述</th>
                    <th>操作</th>
                </tr>
            </thead>
            <tbody>
               {{ each list}}
                    <tr>
                        <td>{{ $value.id }}</td>
                        <td>{{ $value.name }}</td>
                        <td>{{ $value.author }}</td>
                        <td>{{ $value.category }}</td>
                        <td>{{ $value.description }}</td>
                        <td><a href="/toEditBook?id={{$value.id}}">修改</a>|<a class='del' href="/deleteBook?id={{$value.id}}">删除</a></td>
                    </tr>
               {{ /each}}
            </tbody>
        </table>
    </div>
</body>
</html>
  1. 添加图书个管理图书界面(addBook.art,editBook.art):
// addBook 添加图书
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>添加图书</title>
</head>
<body>
    <div>添加图书</div>
    <form action="/addBook" method="post">
        编号: <input type="text" name="id" id=""><br>
        名称: <input type="text" name="name" id=""><br>
        作者: <input type="text" name="author" id=""><br>
        类别: <input type="text" name="category" id=""><br>
        描述: <input type="text" name="description" id=""><br>
        <input type="submit" value="提交">
    </form>
</body>
</html>
// editBook编辑图书
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>编辑图书</title>
</head>
<body>
    <div>编辑图书</div>
    <form action="/editBook" method="post">
        编号: <input type="text" name="id" value = "{{id}}"><br>
        名称: <input type="text" name="name" value = "{{ name }}"><br>
        作者: <input type="text" name="author" value = "{{ author }}"><br>
        类别: <input type="text" name="category" value = "{{ category }}"><br>
        描述: <input type="text" name="description" value = "{{ description }}"><br>
        <input type="submit" value="提交">
    </form>
</body>
</html>
  1. 输入命令nodemon index.js来跑自己的程序吧!体验喜悦的时刻到了!
相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
相关文章
|
2月前
|
存储 缓存 监控
MySQL服务器配置优化:my.cnf参数调优指南
本文深入解析了MySQL核心配置参数及性能优化技巧,涵盖内存结构、调优原则、存储引擎优化、查询性能优化等内容,通过实战案例帮助读者构建高性能MySQL服务器配置,解决常见的性能瓶颈问题。
|
7月前
|
关系型数据库 MySQL Linux
在Linux环境下备份Docker中的MySQL数据并传输到其他服务器以实现数据级别的容灾
以上就是在Linux环境下备份Docker中的MySQL数据并传输到其他服务器以实现数据级别的容灾的步骤。这个过程就像是一场接力赛,数据从MySQL数据库中接力棒一样传递到备份文件,再从备份文件传递到其他服务器,最后再传递回MySQL数据库。这样,即使在灾难发生时,我们也可以快速恢复数据,保证业务的正常运行。
349 28
|
8月前
|
Kubernetes API 网络安全
当node节点kubectl 命令无法连接到 Kubernetes API 服务器
当Node节点上的 `kubectl`无法连接到Kubernetes API服务器时,可以通过以上步骤逐步排查和解决问题。首先确保网络连接正常,验证 `kubeconfig`文件配置正确,检查API服务器和Node节点的状态,最后排除防火墙或网络策略的干扰,并通过重启服务恢复正常连接。通过这些措施,可以有效解决与Kubernetes API服务器通信的常见问题,从而保障集群的正常运行。
632 17
|
8月前
|
安全 关系型数据库 MySQL
【YashanDB知识库】YMP从mysql迁移到崖山,报错:服务器错误
【YashanDB知识库】YMP从mysql迁移到崖山,报错:服务器错误
|
8月前
|
安全 关系型数据库 MySQL
【YashanDB知识库】YMP从mysql迁移到崖山,报错:服务器错误
【YashanDB知识库】YMP从mysql迁移到崖山,报错:服务器错误
【YashanDB知识库】YMP从mysql迁移到崖山,报错:服务器错误
|
9月前
|
存储 SQL 关系型数据库
服务器数据恢复—云服务器上mysql数据库数据恢复案例
某ECS网站服务器,linux操作系统+mysql数据库。mysql数据库采用innodb作为默认存储引擎。 在执行数据库版本更新测试时,操作人员误误将在本来应该在测试库执行的sql脚本在生产库上执行,导致生产库上部分表被truncate,还有部分表中少量数据被delete。
255 25
|
9月前
|
监控 关系型数据库 MySQL
如何解决 MySQL 数据库服务器 CPU 飙升的情况
大家好,我是 V 哥。当 MySQL 数据库服务器 CPU 飙升时,如何快速定位和解决问题至关重要。本文整理了一套实用的排查和优化套路,包括使用系统监控工具、分析慢查询日志、优化 SQL 查询、调整 MySQL 配置参数、优化数据库架构及检查硬件资源等步骤。通过一个电商业务系统的案例,详细展示了从问题发现到解决的全过程,帮助你有效降低 CPU 使用率,提升系统性能。关注 V 哥,掌握更多技术干货。
1289 0
|
4月前
|
JavaScript Unix Linux
nvm与node.js的安装指南
通过以上步骤,你可以在各种操作系统上成功安装NVM和Node.js,从而在不同的项目中灵活切换Node.js版本。这种灵活性对于管理不同项目的环境依赖而言是非常重要的。
1061 11
|
9月前
|
弹性计算 JavaScript 前端开发
一键安装!阿里云新功能部署Nodejs环境到ECS竟然如此简单!
Node.js 是一种高效的 JavaScript 运行环境,基于 Chrome V8 引擎,支持在服务器端运行 JavaScript 代码。本文介绍如何在阿里云上一键部署 Node.js 环境,无需繁琐配置,轻松上手。前提条件包括 ECS 实例运行中且操作系统为 CentOS、Ubuntu 等。功能特点为一键安装和稳定性好,支持常用 LTS 版本。安装步骤简单:登录阿里云控制台,选择扩展程序管理页面,安装 Node.js 扩展,选择实例和版本,等待创建完成并验证安装成功。通过阿里云的公共扩展,初学者和经验丰富的开发者都能快速进入开发状态,开启高效开发之旅。

热门文章

最新文章

推荐镜像

更多