Nodejs学习五(CRUD)

一、路由设计

在这里插入图片描述

二、处理路由模块

在这里插入图片描述

三、代码

views-edit:

<!doctype html>
<html lang="zh-CN">

<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
    <meta name="description" content="">
    <meta name="author" content="">
    <link rel="icon" href="https://cdn.jsdelivr.net/npm/@bootcss/v3.bootcss.com@1.0.14/favicon.ico">
    <link rel="canonical" href="https://getbootstrap.com/docs/3.4/examples/dashboard/">

    <title>NODE CURD</title>

    <!-- Bootstrap core CSS -->
    <link href="https://cdn.jsdelivr.net/npm/@bootcss/v3.bootcss.com@1.0.14/dist/css/bootstrap.min.css"
        rel="stylesheet">

    <!-- IE10 viewport hack for Surface/desktop Windows 8 bug -->
    <link href="https://cdn.jsdelivr.net/npm/@bootcss/v3.bootcss.com@1.0.14/assets/css/ie10-viewport-bug-workaround.css"
        rel="stylesheet">

    <!-- Custom styles for this template -->
    <link href="https://cdn.jsdelivr.net/npm/@bootcss/v3.bootcss.com@1.0.14/examples/dashboard/dashboard.css"
        rel="stylesheet">
    <!-- <link href="/public/css/main.css" rel="stylesheet"> -->


    <!-- Just for debugging purposes. Don't actually copy these 2 lines! -->
    <!--[if lt IE 9]><script src="https://cdn.jsdelivr.net/npm/@bootcss/v3.bootcss.com@1.0.14/assets/js/ie8-responsive-file-warning.js"></script><![endif]-->
    <script
        src="https://cdn.jsdelivr.net/npm/@bootcss/v3.bootcss.com@1.0.14/assets/js/ie-emulation-modes-warning.js"></script>

    <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
    <!--[if lt IE 9]>
      <script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script>
      <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
    <![endif]-->
</head>

<body>

  

    <div class="container-fluid">
        <div class="row">
            <div class="col-sm-3 col-md-2 sidebar">
                <ul class="nav nav-sidebar">
                    <li class="active"><a href="#">Overview <span class="sr-only">(current)</span></a></li>
                    <li><a href="#">Reports</a></li>
                    <li><a href="#">Analytics</a></li>
                    <li><a href="#">Export</a></li>
                </ul>
                <ul class="nav nav-sidebar">
                    <li><a href="">Nav item</a></li>
                    <li><a href="">Nav item again</a></li>
                    <li><a href="">One more nav</a></li>
                    <li><a href="">Another nav item</a></li>
                    <li><a href="">More navigation</a></li>
                </ul>
                <ul class="nav nav-sidebar">
                    <li><a href="">Nav item again</a></li>
                    <li><a href="">One more nav</a></li>
                    <li><a href="">Another nav item</a></li>
                </ul>
            </div>
            <div class="col-sm-9 col-sm-offset-3 col-md-10 col-md-offset-2 main">
                <h1 class="page-header">NODE CURD</h1>



                <h2 class="sub-header">添加学生</h2>
                <form action="/students/edit" method="POST">
                    <input type="hidden" value="{{student.id}}" name="id">
                    <div class="form-group">
                        <label for="exampleInputEmail1">姓名</label>
                        <input type="text" class="form-control" id="" placeholder="name" name="name" value="{{student.name}}">
                    </div>
                    <div class="form-group">
                        <label for="gender">性别</label>
                        <label class="radio-inline">
                            <input type="radio" name="gender" id="" value="0"></label>
                          <label class="radio-inline">
                            <input type="radio" name="gender" id="" value="1"></label>
                         </div>
                    <div class="form-group">
                        <label for="exampleInputFile">年龄</label>
                        <input type="number" class="form-control" id="" name="age" value="{{student.age}}">
                    </div>
                    <div class="form-group">
                        <label for="gender">爱好 </label>
                            <input type="text" class="form-control" name="hobbies"  value="{{student.hobbies}}">
                        
                    </div>
                    <button type="submit" class="btn btn-default">Submit</button>
                </form>
            </div>
        </div>
    </div>

    <!-- Bootstrap core JavaScript
    ================================================== -->
    <!-- Placed at the end of the document so the pages load faster -->
    <script src="https://cdn.jsdelivr.net/npm/jquery@1.12.4/dist/jquery.min.js"
        integrity="sha384-nvAa0+6Qg9clwYCGGPpDQLVpLNn0fRaROjHqs13t4Ggj3Ez50XnGQqc/r8MhnRDZ"
        crossorigin="anonymous"></script>
    <script>window.jQuery || document.write('<script src="https://cdn.jsdelivr.net/npm/@bootcss/v3.bootcss.com@1.0.14/assets/js/vendor/jquery.min.js"><\/script>')</script>
    <script src="https://cdn.jsdelivr.net/npm/@bootcss/v3.bootcss.com@1.0.14/dist/js/bootstrap.min.js"></script>
    <!-- Just to make our placeholder images work. Don't actually copy the next line! -->
    <script src="https://cdn.jsdelivr.net/npm/@bootcss/v3.bootcss.com@1.0.14/assets/js/vendor/holder.min.js"></script>
    <!-- IE10 viewport hack for Surface/desktop Windows 8 bug -->
    <script
        src="https://cdn.jsdelivr.net/npm/@bootcss/v3.bootcss.com@1.0.14/assets/js/ie10-viewport-bug-workaround.js"></script>
</body>

</html>

views-index:

<!doctype html>
<html lang="zh-CN">

<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
    <meta name="description" content="">
    <meta name="author" content="">
    <link rel="icon" href="https://cdn.jsdelivr.net/npm/@bootcss/v3.bootcss.com@1.0.14/favicon.ico">
    <link rel="canonical" href="https://getbootstrap.com/docs/3.4/examples/dashboard/">

    <title>NODE CURD</title>

    <!-- Bootstrap core CSS -->
    <link href="https://cdn.jsdelivr.net/npm/@bootcss/v3.bootcss.com@1.0.14/dist/css/bootstrap.min.css"
        rel="stylesheet">

    <!-- IE10 viewport hack for Surface/desktop Windows 8 bug -->
    <link href="https://cdn.jsdelivr.net/npm/@bootcss/v3.bootcss.com@1.0.14/assets/css/ie10-viewport-bug-workaround.css"
        rel="stylesheet">

    <!-- Custom styles for this template -->
    <link href="https://cdn.jsdelivr.net/npm/@bootcss/v3.bootcss.com@1.0.14/examples/dashboard/dashboard.css"
        rel="stylesheet">
    <!-- <link href="/public/css/main.css" rel="stylesheet"> -->


    <!-- Just for debugging purposes. Don't actually copy these 2 lines! -->
    <!--[if lt IE 9]><script src="https://cdn.jsdelivr.net/npm/@bootcss/v3.bootcss.com@1.0.14/assets/js/ie8-responsive-file-warning.js"></script><![endif]-->
    <script
        src="https://cdn.jsdelivr.net/npm/@bootcss/v3.bootcss.com@1.0.14/assets/js/ie-emulation-modes-warning.js"></script>

    <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
    <!--[if lt IE 9]>
      <script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script>
      <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
    <![endif]-->
</head>

<body>
 

    <div class="container-fluid">
        <div class="row">
            <div class="col-sm-3 col-md-2 sidebar">
                <ul class="nav nav-sidebar">
                    <li class="active"><a href="#">Overview <span class="sr-only">(current)</span></a></li>
                    <li><a href="#">Reports</a></li>
                    <li><a href="#">Analytics</a></li>
                    <li><a href="#">Export</a></li>
                </ul>
                <ul class="nav nav-sidebar">
                    <li><a href="">Nav item</a></li>
                    <li><a href="">Nav item again</a></li>
                    <li><a href="">One more nav</a></li>
                    <li><a href="">Another nav item</a></li>
                    <li><a href="">More navigation</a></li>
                </ul>
                <ul class="nav nav-sidebar">
                    <li><a href="">Nav item again</a></li>
                    <li><a href="">One more nav</a></li>
                    <li><a href="">Another nav item</a></li>
                </ul>
            </div>
            <div class="col-sm-9 col-sm-offset-3 col-md-10 col-md-offset-2 main">
                <h1 class="page-header">NODE CURD</h1>

                <div class="row placeholders">
                    {{each fruits}}

                    <div class="col-xs-6 col-sm-3 placeholder">
                        <img src="data:image/gif;base64,R0lGODlhAQABAIAAAHd3dwAAACH5BAAAAAAALAAAAAABAAEAAAICRAEAOw=="
                            width="200" height="200" class="img-responsive" alt="Generic placeholder thumbnail">
                        <h4>{{$value}}</h4>
                        <span class="text-muted">Something else</span>
                    </div>
                    {{/each}}
                </div>

                <h2 class="sub-header">Section title</h2>
                <a href="/students/new" class="btn btn-success">添加学生</a>
                <div class="table-responsive">
                    <table class="table table-striped">
                        <thead>
                            <tr>
                                <th>#</th>
                                <th>姓名</th>
                                <th>性别</th>
                                <th>年龄</th>
                                <th>爱好</th>
                                <th>操作</th>
                            </tr>
                        </thead>
                        <tbody>
                            {{each students}}
                            <tr>
                                <td>{{$value.id}}</td>
                                <td>{{$value.name}}</td>
                                <td>{{$value.gender}}</td>
                                <td>{{$value.age}}</td>
                                <td>{{$value.hobbies}}</td>
                                <td>
                                    <a href="/students/edit?id={{$value.id}}">编辑</a>
                                    <a href="/students/delete?id={{$value.id}}">删除</a>
                                </td>
                            </tr>
                            {{/each}}
                        </tbody>
                    </table>
                </div>
            </div>
        </div>
    </div>

    <!-- Bootstrap core JavaScript
    ================================================== -->
    <!-- Placed at the end of the document so the pages load faster -->
    <script src="https://cdn.jsdelivr.net/npm/jquery@1.12.4/dist/jquery.min.js"
        integrity="sha384-nvAa0+6Qg9clwYCGGPpDQLVpLNn0fRaROjHqs13t4Ggj3Ez50XnGQqc/r8MhnRDZ"
        crossorigin="anonymous"></script>
    <script>window.jQuery || document.write('<script src="https://cdn.jsdelivr.net/npm/@bootcss/v3.bootcss.com@1.0.14/assets/js/vendor/jquery.min.js"><\/script>')</script>
    <script src="https://cdn.jsdelivr.net/npm/@bootcss/v3.bootcss.com@1.0.14/dist/js/bootstrap.min.js"></script>
    <!-- Just to make our placeholder images work. Don't actually copy the next line! -->
    <script src="https://cdn.jsdelivr.net/npm/@bootcss/v3.bootcss.com@1.0.14/assets/js/vendor/holder.min.js"></script>
    <!-- IE10 viewport hack for Surface/desktop Windows 8 bug -->
    <script
        src="https://cdn.jsdelivr.net/npm/@bootcss/v3.bootcss.com@1.0.14/assets/js/ie10-viewport-bug-workaround.js"></script>
</body>

</html>

views-new:

<!doctype html>
<html lang="zh-CN">

<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
    <meta name="description" content="">
    <meta name="author" content="">
    <link rel="icon" href="https://cdn.jsdelivr.net/npm/@bootcss/v3.bootcss.com@1.0.14/favicon.ico">
    <link rel="canonical" href="https://getbootstrap.com/docs/3.4/examples/dashboard/">

    <title>NODE CURD</title>

    <!-- Bootstrap core CSS -->
    <link href="https://cdn.jsdelivr.net/npm/@bootcss/v3.bootcss.com@1.0.14/dist/css/bootstrap.min.css"
        rel="stylesheet">

    <!-- IE10 viewport hack for Surface/desktop Windows 8 bug -->
    <link href="https://cdn.jsdelivr.net/npm/@bootcss/v3.bootcss.com@1.0.14/assets/css/ie10-viewport-bug-workaround.css"
        rel="stylesheet">

    <!-- Custom styles for this template -->
    <link href="https://cdn.jsdelivr.net/npm/@bootcss/v3.bootcss.com@1.0.14/examples/dashboard/dashboard.css"
        rel="stylesheet">
    <!-- <link href="/public/css/main.css" rel="stylesheet"> -->


    <!-- Just for debugging purposes. Don't actually copy these 2 lines! -->
    <!--[if lt IE 9]><script src="https://cdn.jsdelivr.net/npm/@bootcss/v3.bootcss.com@1.0.14/assets/js/ie8-responsive-file-warning.js"></script><![endif]-->
    <script
        src="https://cdn.jsdelivr.net/npm/@bootcss/v3.bootcss.com@1.0.14/assets/js/ie-emulation-modes-warning.js"></script>

    <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
    <!--[if lt IE 9]>
      <script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script>
      <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
    <![endif]-->
</head>

<body>

  

    <div class="container-fluid">
        <div class="row">
            <div class="col-sm-3 col-md-2 sidebar">
                <ul class="nav nav-sidebar">
                    <li class="active"><a href="#">Overview <span class="sr-only">(current)</span></a></li>
                    <li><a href="#">Reports</a></li>
                    <li><a href="#">Analytics</a></li>
                    <li><a href="#">Export</a></li>
                </ul>
                <ul class="nav nav-sidebar">
                    <li><a href="">Nav item</a></li>
                    <li><a href="">Nav item again</a></li>
                    <li><a href="">One more nav</a></li>
                    <li><a href="">Another nav item</a></li>
                    <li><a href="">More navigation</a></li>
                </ul>
                <ul class="nav nav-sidebar">
                    <li><a href="">Nav item again</a></li>
                    <li><a href="">One more nav</a></li>
                    <li><a href="">Another nav item</a></li>
                </ul>
            </div>
            <div class="col-sm-9 col-sm-offset-3 col-md-10 col-md-offset-2 main">
                <h1 class="page-header">NODE CURD</h1>



                <h2 class="sub-header">添加学生</h2>
                <form action="/students/new" method="POST">
                    <div class="form-group">
                        <label for="exampleInputEmail1">姓名</label>
                        <input type="text" class="form-control" id="" placeholder="name" name="name">
                    </div>
                    <div class="form-group">
                        <label for="gender">性别</label>
                        <label class="radio-inline">
                            <input type="radio" name="gender" id="" value="0"></label>
                          <label class="radio-inline">
                            <input type="radio" name="gender" id="" value="1"></label>
                         </div>
                    <div class="form-group">
                        <label for="exampleInputFile">年龄</label>
                        <input type="number" class="form-control" id="" name="age">
                    </div>
                    <div class="form-group">
                        <label for="gender">爱好
                            <input type="text" class="form-control">
                         </label>
                    </div>
                    <button type="submit" class="btn btn-default">Submit</button>
                </form>
            </div>
        </div>
    </div>

    <!-- Bootstrap core JavaScript
    ================================================== -->
    <!-- Placed at the end of the document so the pages load faster -->
    <script src="https://cdn.jsdelivr.net/npm/jquery@1.12.4/dist/jquery.min.js"
        integrity="sha384-nvAa0+6Qg9clwYCGGPpDQLVpLNn0fRaROjHqs13t4Ggj3Ez50XnGQqc/r8MhnRDZ"
        crossorigin="anonymous"></script>
    <script>window.jQuery || document.write('<script src="https://cdn.jsdelivr.net/npm/@bootcss/v3.bootcss.com@1.0.14/assets/js/vendor/jquery.min.js"><\/script>')</script>
    <script src="https://cdn.jsdelivr.net/npm/@bootcss/v3.bootcss.com@1.0.14/dist/js/bootstrap.min.js"></script>
    <!-- Just to make our placeholder images work. Don't actually copy the next line! -->
    <script src="https://cdn.jsdelivr.net/npm/@bootcss/v3.bootcss.com@1.0.14/assets/js/vendor/holder.min.js"></script>
    <!-- IE10 viewport hack for Surface/desktop Windows 8 bug -->
    <script
        src="https://cdn.jsdelivr.net/npm/@bootcss/v3.bootcss.com@1.0.14/assets/js/ie10-viewport-bug-workaround.js"></script>
</body>

</html>

app.js:

var express = require('express')
var router = require('./router')
var bodyParser = require('body-parser')

var app = express()

app.use('/node_modules/', express.static('./node_modules/'))
app.use('/piblic/', express.static('./piblic/'))

app.engine('html', require('express-art-template'));


// 配置模板引擎和 body-parser一定要在app.ues(router)挂载路由之前
// parse application/x-www-form-urlencoded
app.use(bodyParser.urlencoded({ extended: false }))
// parse application/json
app.use(bodyParser.json())

// 把路由容器挂载到app服务中
app.use(router)

app.listen(3000, function () {
    console.log('running 3000....')
})

module.exports = app

router.js:

var fs = require('fs')
var Student = require('./student')

// Student.updateById({
//     id:1,
//     name:'zha'

// },function (err) { 
//     if(err){
//         return console.log('修改失败')
//     }
//     console.log('修改成功')
//  })
// module.exports = function (app) {
//     app.get('/students', function (req, res) {
//         // readFile的第二个可选参数是可选的,utf8就是告诉他读取到的文件直接按照utf8编码来转换成我们理解的语言
//         fs.readFile('./db.json', 'utf8', function (err, data) {
//             if (err) {
//                 return res.status(500).send('Server error.')
//             }
//             var students = JSON.parse(data).students
//             var fruits = JSON.parse(data).fruits
//             res.render('index.html', {
//                 //    从文件中读取到的数据一定是字符串,所以这里一定要手动转换成对象
//                 fruits: fruits,
//                 students: students
//             })
//         })
//     })
//     app.get('/students', function (req, res) {

//     })
//     app.get('/students/new', function (req, res) {

//     })
//     app.post('/students/new', function (req, res) {

//     })
//     app.get('/students,edit', function (req, res) {

//     })
//     app.post('/students/edit', function (req, res) {

//     })
//     app.get('/students/delete', function (req, res) {

//     })
// }

// 上面这种方法不方便
// 所以 express提供了一种更做我们好的方式
// 专门用来包装路由的
var express = require('express')
// 1.创建一个路由容器
var router = express.Router()
// 2.把路由都挂载到router中
router.get('/students', function (req, res) {
    // readFile的第二个可选参数是可选的,utf8就是告诉他读取到的文件直接按照utf8编码来转换成我们理解的语言
    // fs.readFile('./db.json', 'utf8', function (err, data) {
    //     if (err) {
    //         return res.status(500).send('Server error.')
    //     }
    //     var students = JSON.parse(data).students
    //     var fruits = JSON.parse(data).fruits
    //     res.render('index.html', {
    //         //    从文件中读取到的数据一定是字符串,所以这里一定要手动转换成对象
    //         fruits: fruits,
    //         students: students
    //     })
    // })

    Student.find(function (err, students) {
        if (err) {
            return res.status(500).send('Server error.')
        }
        res.render('index.html', {
            //    从文件中读取到的数据一定是字符串,所以这里一定要手动转换成对象
            // fruits: fruits,
            students: students
        })
    })
})

router.get('/students/new', function (req, res) {
    res.render('new.html')
})


router.post('/students/new', function (req, res) {
    // 1.获取表单数据
    console.log(req.body)
    // 2.处理
    // 将数据保存到db.json文件中用以持久化
    // 3.发送响应
    // 先读取出来,再转成对象。然后往对象中push数。再把字符串转成对象。
    Student.save(req.body, function (err) {
        if (err) {
            return res.status(500).send('Server error.')
        }
        res.redirect('/students')
    })

})


router.get('/students/edit', function (req, res) {
    // 1.在客户端的列表页中处理链接问题,需要有id参数
    // 2.获取要编辑的学生的id
    // 3.渲染编辑页面
    //      根据id把学生的信息查出来,再使用模板引擎渲染页面
    Student.findById(parseInt(req.query.id), function (err, student) {
        if (err) {
            return res.status(500).send('Server error.')
        }
        res.render('edit.html', {
            student: student
        })
    })

})


router.post('/students/edit', function (req, res) {
    // 1.获取表单数据req.body
    // 2.保存更新student.update()
    // 3.发送响应
    Student.updateById(req.body, function (err) {
        if (err) {
            return res.status(500).send('Server error.')
        }
        res.redirect('/students')
    })

})


router.get('/students/delete', function (req, res) {
    // 1.获取要删除的id
    // 2.根据id执行删除操作
    // 3.根据操作结果发送响应数据
    Student.deleteById(req.query.id, function (err) {
        if (err) {
            return res.status(500).send('Server error.')
        }
        res.redirect('/students')
    })
})
// 3.把router导出
module.exports = router


student.js:

/** 
 * 数据操作文件模块
 * 职责:
 * 操作文件中的数据,只处理数据,不关心业务
 * */

var fs = require('fs')

var dbPath = './db.json'
// 获取所有学生列表
/**
 * callback 中的参数
 * 第一个参数是err
 *      成功是null 错误是错误对象
 * 第二个参数是结果
 *      成功是数组 错误是undefined
 */
exports.find = function (callback) {
    fs.readFile(dbPath, 'utf8', function (err, data) {
        if (err) {
            return callback(err)
        }
        callback(null, JSON.parse(data).students)
    })
}
/**
 * 根据id获取学生信息对象
 * @param {Number} id       学生id
 * @param {*} callback 
 */
exports.findById = function (id, callback) {
    fs.readFile(dbPath, 'utf8', function (err, data) {
        if (err) {
            return callback(err)
        }
        var students = JSON.parse(data).students
        var ret = students.find(function (item) {
            return item.id === parseInt(id)
        })
        callback(null, ret)
    })
}


// 添加保存学生
exports.save = function (student, callback) {
    fs.readFile(dbPath, 'utf8', function (err, data) {
        if (err) {
            return callback(err)
        }

        var students = JSON.parse(data).students

      
        // 处理id唯一的,不重复
        student.id = students[students.length - 1].id + 1
        // 把用户传递的对象保存到数组中
        students.push(student)
        // 把对象数据转换成字符串
        var fileData = JSON.stringify({
            students: students
        })
        // 把字符串保存到文件中
        fs.writeFile(dbPath, fileData, function (err) {
            if (err) { return callback(err) }
            callback(null)
        })
    })
}



// 更新学生
exports.updateById = function (student, callback) {
    fs.readFile(dbPath, 'utf8', function (err, data) {
        if (err) {
            return callback(err)
        }

        var students = JSON.parse(data).students

        // 注意:这里要把id统一成数字类型
        student.id = parseInt(student.id)

        // 要修改谁,就要把他找出来
        // ES6中的一个数组方法:find
        // 当某个遍历项符合 item.id === student.id 条件的时候,find会终止遍历,同时会返回遍历项
        var stu = students.find(function (item) {
            return item.id === parseInt(student.id)
        })
        //  
        for (var key in student) {
            stu[key] = student[key]
        }
        // 把对象数据转换成字符串
        var fileData = JSON.stringify({
            students: students
        })
        // 把字符串保存到文件中
        fs.writeFile(dbPath, fileData, function (err) {
            if (err) { return callback(err) }
            callback(null)
        })
    })
}


// 删除学生
exports.deleteById = function (id, callback) {
    fs.readFile(dbPath, 'utf8', function (err, data) {
        if (err) {
            return callback(err)
        }
        var students = JSON.parse(data).students

        // findIndex 用来根据条件查找元素的下标
        var deleteId = students.findIndex(function (item) {
            return item.id === parseInt(id)
        })
        console.log(deleteId)
        students.splice(deleteId, 1)

        var fileData = JSON.stringify({
            students: students
        })
        fs.writeFile(dbPath, fileData, function (err) {
            if (err) {
                return callback(err)
            }
            callback(null)
        })

    })
}

db.json:

{"students":[{"id":0,"name":"wrwe","gender":1,"age":23,"hobbies":"asdkjha"},{"id":0,"name":"wrwe","gender":1,"age":23,"hobbies":"asdkjha"},{"id":0,"name":"wrwe","gender":1,"age":23,"hobbies":"asdkjha"},{"id":0,"name":"wrwe","gender":1,"age":23,"hobbies":"asdkjha"},{"id":0,"name":"wrwe","gender":1,"age":23,"hobbies":"asdkjha"},{"name":"绕弯儿","gender":"1","age":"43","id":1}]}

版权声明:本文为Wu_JingYi0829原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。