图书管理系统

  1. 初始化packgage.json以及入口文件index.js
 npm init -y
创建index.js
  1. www --- 静态资源根目录
css目录 ---style.css
js目录
img目录
  1. view --- 模板文件目录
addBook.html
editBook.html
index.html
//editBook.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>添加图书</title>
</head>
<body>
    <div>
        <div>编辑图书</div>
        <form action="/editBook" method="post">
            <input type="hidden" name="id" value="{{id}}">
            名称:<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="desc" value="{{desc}}"><br>
            <input type="submit">
        </form>
    </div>
</body>
</html>
//addBook.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>添加图书</title>
</head>
<body>
    <div>
        <div>添加图书</div>
        <form action="/addBook" method="post">
            名称:<input type="text" name="name"><br>
            作者:<input type="text" name="author"><br>
            分类:<input type="text" name="category"><br>
            描述:<input type="text" name="desc"><br>
            <input type="submit">
        </form>
    </div>
</body>
</html>
  1. 安装art-template
npm install art-template --save
  1. 创建服务器
  2. 引入静态资源模块,创建静态资源服务器
const http = require('http');
    const sserver  =require('./static-server.js');

    http.createServer((req, res) => {

        sserver.initStaticServer(req, res, __dirname, '/www');

    }).listen(3000, () => {
        console.log("running……");
    })
  1. 添加首页 --- index.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>首页</title>
    <link rel="stylesheet" type="text/css" href="../www/css/style.css">
    <script type="text/javascript" src="../www/js/jquery.js"></script>
    <script type="text/javascript" src="../www/js/index.js"></script>
</head>
<body>
    <div class="top">图书管理系统 --- <a href="/toAdd">添加图书</a></div>
    <div>
        <table>
            <thead>
                <tr>
                    <th>序号</th>
                    <th>名称</th>
                    <th>作者</th>
                    <th>分类</th>
                    <th>描述</th>
                    <th>编辑</th>
                    <th>删除</th>
                </tr>
            </thead>
            <tbody>
                {{each list as item}}
                <tr>
                    <td>{{item.id}}</td>
                    <td>{{item.name}}</td>
                    <td>{{item.author}}</td>
                    <td>{{item.category}}</td>
                    <td>{{item.desc}}</td>
                    <td><a href="/toEdit?id={{item.id}}">编辑</a></td>
                    <td><a href="/deleteBook?id={{item.id}}">删除</a></td>
                </tr>
                {{/each}}
            </tbody>
        </table>
    </div>
</body>
</html>
  1. 做路由处理
//index.js
const http = require("http");
const sserver = require("./static-server.js");
const template = require("art-template");
const querystring = require("querystring");
const url = require('url');
var dataList = [
{
    id : 1,
    name : '三国演义',
    author : '罗贯中',
    category : '文学',
    desc : '一个杀伐纷争的年代'
},
{
    id : 2,
    name : '水浒传',
    author : '施耐庵',
    category : '文学',
    desc : '草寇就是草寇'
},
{
    id : 3,
    name : '西游记',
    author : '吴承恩',
    category : '文学',
    desc : '佛教与道教的斗争'
},
{
    id : 4,
    name : '红楼梦',
    author : '曹雪芹',
    category : '文学',
    desc : '一个封建王朝的缩影'
},
{
    id : 5,
    name : '浪潮之巅',
    author : '吴军',
    category : '科普',
    desc : 'IT巨头的兴衰史'
}
];
// 计算数据列表中数据的最大值
let countMax = (data) => {
    let arr = [];
    data.forEach((e) => {
        arr.push(e.id);
    });
    let max = Math.max.apply(null,arr);
    return max;
}
http.createServer((req, res) => {
    sserver.initStaticServer(req, res, __dirname, '/www');
    if (req.url === "/") {
        let html = template(__dirname + '/view/index', {list: dataList});
        res.end(html);
    }else if (req.url === "/toAdd") {
        // 跳转到添加图书列表
        let html = template(__dirname + '/view/addBook',{});
        res.end(html);
    }else if (req.url === "/addBook") {
        // 保存表单提交的图书信息
        // formdata表示post 表单提交的数据
        let formdata = '';
        req.on('data', (chunk) => {
            formdata += chunk;
        });

        req.on('end', () => {
            // 把表单数据解析成为对象形式
            let obj = querystring.parse(formdata);
            // 计算数据列表中id的最大值
            obj.id = (countMax(dataList) +1) ;
            dataList.push(obj);
        });

        // 数据添加成功之后,要跳转到主页
        // 302表示http协议的状态码,用来重定向
        // Location 属性指定了重定向的地址
        res.writeHead(302, {
            'location' : '/'
        });

        res.end();
}else if (req.url.startsWith('/toEdit')) {
        // 跳转到编辑图书页面
        let id = url.parse(req.url, true).query.id;
        let book = null;
        dataList.some((obj) => {
            if (id == obj.id) {
                book = obj;
                return false;
            }
        });

        let html = template(__dirname + '/view/editBook', book || {});
        res.end(html);
    }else if (req.url === '/editBook') {
        // 保存编辑图书
        let formdata = '';

        req.on('data',(chunk) => {
            formdata += chunk;
        });

        req.on('end',() => {
            let obj = querystring.parse(formdata);
            dataList.some((item) => {
                if (obj.id == item.id) {
                    item.name = obj.name;
                    item.author = obj.author;
                    item.category = obj.category;
                    item.desc = obj.desc;
                    return false;
                }
            });
            // 数据添加成功之后,要跳转到主页
            // 302表示http协议的状态码,用来重定向
            // Location 属性指定了重定向的地址
            res.writeHead(302, {
                'location' : '/'
            });
            res.end();
        });
    }else if (req.url.startsWith('/deleteBook')) {
        let id = url.parse(req.url, true).query.id;
        dataList.some((item, i) => {
            if (id == item.id) {
                // 删除数据列表中的一条数据
                dataList.splice(i,1);
                return false;
            }
        });
        res.writeHead(302, {
                'location' : '/'
            });
        res.end();
    }
}).listen(3000,() => {
    console.log("我是谁……")
})
  1. 启动服务器
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容