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

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
云数据库 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来跑自己的程序吧!体验喜悦的时刻到了!
相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
4月前
|
JavaScript Ubuntu
百度搜索:蓝易云【Ubuntu搭建Nodejs服务器】
请注意,以上步骤仅是简单的示例,实际上,你可以根据需要配置更多Node.js服务器设置和添加更多功能。
37 2
|
7月前
|
PHP Apache
PHP环境搭建(配置php模块到apache服务器)
PHP环境搭建(配置php模块到apache服务器)
69 0
|
8月前
|
前端开发 关系型数据库 MySQL
高性能服务器Nodejs操作Mysql数据库
高性能服务器Nodejs操作Mysql数据库
82 0
|
7月前
|
存储 运维 数据挖掘
服务器数据恢复-服务器硬盘掉线导致银行业务模块崩溃的数据恢复案例
某银行的某一业务模块崩溃,无法正常使用。排查服务器故障,发现运行该业务模块的服务器中多块硬盘离线,导致上层应用崩溃。 故障服务器内多块硬盘掉线,硬盘掉线数量超过服务器raid阵列冗余级别所允许的硬盘掉线数量,导致服务器瘫痪。可以通过修复硬盘物理故障,提取故障盘数据后重组raid的方案来恢复服务器数据。
|
1月前
|
开发框架 JavaScript 中间件
node+express搭建服务器环境
node+express搭建服务器环境
node+express搭建服务器环境
|
6月前
|
NoSQL 关系型数据库 MySQL
Docker-compose封装mysql和redis并初始化数据
Docker-compose封装mysql和redis并初始化数据
150 0
|
8月前
|
JavaScript
nodejs服务器的运行
nodejs服务器的运行
212 1
|
4月前
Visual Studio 2022无法连接到Web服务器IIS Express
Visual Studio 2022无法连接到Web服务器IIS Express
47 2
|
4月前
|
JavaScript 前端开发
nodejs配置express服务器,运行后自动打开浏览器
作为前端开发的项目,有的时候打包完后就想在本地测试是什么样子的,另外一些如cesium等程序,需要在服务的环境下才能启动三维球等。 这里使用nodejs+express搭建一个普通的服务器。
nodejs配置express服务器,运行后自动打开浏览器
|
5月前
|
前端开发 JavaScript 关系型数据库
【前端必备】使用NodeJs写接口(本地连接MySQL + 连接到云服务MySQL)
【前端必备】使用NodeJs写接口(本地连接MySQL + 连接到云服务MySQL)
129 0

推荐镜像

更多