node-express路由实例

每个express都有一个内置的应用程序路由器
路由:实现中间件和路由的分离

顶级express对象具有Router()创建新router对象的功能。

    var router = express.Router([options]);
    //可选options参数指定路由器的行为。

其实我们可以将router视为一个路由分支,因此router是有中间件和HTTP方法路由(如get,put,post,等),router就像一个应用程序。

中间件和路由的分离例子

app.js:

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

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

router.js

  • 根据不同的请求方法+请求路径设置具体的请求处理函数
  • 模块职责要单一,不要乱写
  • 我们划分模块的目的就是为了增强项目代码的可维护性
  • 提升开发效率
var fs=require('fs')
//
var Student = require('./student')


var express=require('express')	//此处加载express的目的是为了使用express调用router

var router=express.Router()


router.post('path', function (req, res) {
     
	 Student.save(req.body, function (err) {
     
    	if (err) {
     
      		return res.status(500).send('Server error.')
    	}
    	res.redirect('/students')
 	 })
	})

router.get('path', function (req, res) {
     
})


// 3. 把 router 导出
module.exports = router

student.js

  • 数据操作文件模块
  • 职责:操作文件中的数据,只处理数据,不关心业务
  • 这里才是我们学习 Node 的精华部分:奥义之所在
  • 封装异步 API
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)
      }
      // 成功就没错,所以错误对象是 null
      callback(null)
    })
  })
}

你可能感兴趣的:(前端学习)