express 服务器搭建

安装

 npm i express --save                  //node封装服务器
 npm i art-template --save             //art模板
 npm i express-art-template --save     //art-template依赖模板
 npm i body-parser --save              // //req.query 只能拿到get请求,x需要安装,解决post请求,req.body
 npm i nodemon    
 //nodemon是第三方命令方工具,用于解决频繁的服务器重启问题,
 //nodemon 是基于Node.js,第三方命令行工具

引用

app.js

var express = require('express');

var bodyParser = require('body-parser')
//express中获取post请求参数
//1.express中没有获取post请求体的api,这里使用一个第三方包 body-parser
//2.引包 body-parser
//3.只要加入以下配置,则req请求参数会多出来一个属性:body,也就是说可以通过req.body获取数据了

var router = require('./router');
var app = express();

//配置开放路径
//只要这样做就可以直接通过访问/public/xx的方式访问public里面的所有资源了
//app.use('/public/',express.static('./public/'))
app.use('/node_modules/', express.static('./node_modules/'))
app.use('/public/', express.static('./public/'));

//配置模板引擎
// view engine setup
//配置使用 art-template
//第一个参数当渲染以.art文件结尾的时候,使用art-template
//express-art-template是专门用来在Express中把art-template整合到Express中的
//虽然不需要加载但是需要安装,因为express-art-template依赖了art-template
//Express为Response对象提供了一个方法render
//res.render('模板名字',{模板数据})
//第一个参数不能写路径,默认会去项目中的views目录查找该模板文件

//如果想修改默认的views目录,则可以
//app.set('views','render函数默认路径')
app.engine('html', require('express-art-template'));

//配置bodyParser必须在挂载路由之前router
//parse application/x-www-form-urllencoded
app.use(bodyParser.urlencoded({extends:false}))

//parse application/json
app.use(bodyParser.json())

//把路由router挂载到app中国
app.use(router)

app.listen(3000, () => {
    console.log('running……  http://127.0.0.1:3000');
})

router.js

var fs = require('fs');
var express = require('express')
//express中有一个Router方法
var router = express.Router();
var Students = require('./students');
//然后 router.get()使用路由
router.get('/', (req, res) => {
    //readFile第二个参数是可选,传入utf8就是告诉它把读取到的文件转成我们能读取的字符
    //还可以通过data.toString()方式
    res.render('index.html')
})
//列表
router.get('/students', function (req, res) {

    Students.find(function (err, students) {
        if (err) {
            return res.status(500).send('Server error');
        }
        res.render('students.html', {
            dashboard: [
                '苹果',
                '橘子',
                '香蕉',
                '西瓜'
            ],
            students: students
        })
    })
})

//保存学生页面
router.get('/students/new', function (req, res) {
    res.render('new.html')
})

//保存学生接口
router.post('/students/new', function (req, res) {
    //1.获取表单数据
    //2.处理
    //3.发送响应
    //先读取数据,转成对象,然后把数据push进去
    //然后把对象转成字符串
    //然后把字符串再次写入文件
    Students.save(req.body, function (err) {
        if (err) {
            return res.status(500).send('Server error');
        }
        res.redirect('/students')
    })
})

//编辑页面
router.get('/students/edit', function (req, res) {
    Students.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) {
    //获取表单数据
    Students.updata(req.body, function (err) {
        if (err) {
            return res.status(500).send('Server error');
        }
        res.redirect('/students')
    })

})

//删除接口
router.get('/students/delete', function (req, res) {
    Students.delete(parseInt(req.query.id), function (err) {
        if (err) {
            return res.status(500).send('Server error')
        }
        res.redirect('/students');
    })
})

//最后导出
module.exports = router;
//Express提供了一种更好的方式实现路由

students.js

/*
 *数据操作模块 
 * 
 */
var fs = require('fs');
var daPath = './db.json'
/**获取所有学生列表 */
exports.find = function (callback) {
  fs.readFile(daPath, 'utf8', function (err, data) {
    if (err) {
      return callback(err)
    }
    callback(null, JSON.parse(data).students);
  })
}

/**添加保存学生 */
exports.save = function (student, callback) {
  fs.readFile(daPath, 'utf8', function (err, data) {
    if (err) {
      return callback(err)
    }
    var students = JSON.parse(data).students;
    student.id = students.length
    students.push(student);
    var ret = JSON.stringify({
      students: students
    })
    fs.writeFile(daPath, ret, function (err, data) {
      if (err) {
        return callback(err)
      }
      callback(null)
    })
  })
}

/**更新学生 */
exports.updata = function (student, callback) {
  fs.readFile(daPath, 'utf8', function (err, data) {
    if (err) {
      return callback(err)
    }
    var students = JSON.parse(data).students;
    student.id = parseInt(student.id)
    var updataStudents = students.find(e => {
      return e.id == student.id
    });
    for (const key in student) {
      updataStudents[key] = student[key]
    }

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

/**删除学生 */

exports.delete = function (id,callback) {
  fs.readFile(daPath, 'utf8', function (err, data) {
    if (err) {
      return callback(err)
    }
    var students = JSON.parse(data).students;
    var delStudents = students.filter(e => {
      return e.id != id;
    });
    var ret = JSON.stringify({
      students: delStudents
    })
    fs.writeFile(daPath, ret, function (err, data) {
      if (err) {
        return callback(err)
      }
      callback(null)
    })
  })
}

/**根据id查询单个学生 */

exports.findById = function (id, callback) {
  fs.readFile(daPath, 'utf8', function (err, data) {
    if (err) {
      return callback(err)
    }
    var students =JSON.parse(data).students;
    var ret = students.find(function(item){
       return item.id ===id;
    })
    callback(null,ret)
  })
}

db.json

  {
    "students": [{
        "name": "刘备",
        "gender": "0",
        "age": "13",
        "id": 0
    }, {
        "name": "关羽",
        "gender": "0",
        "age": "13",
        "id": 1
    }, {
        "name": "张飞",
        "gender": "0",
        "age": "13",
        "id": 2
    }, {
        "name": "赵云",
        "gender": "0",
        "age": "12",
        "id": 3
    }, {
        "name": "小乔",
        "gender": "1",
        "age": "11",
        "id": 4
    }, {
        "name": "大乔",
        "gender": "1",
        "age": "12",
        "id": 5
    }]
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值