nodejs10-路由的封装(上)

作者: 经纬文学 | 来源:发表于2019-11-12 20:30 被阅读0次
    • 先附上上章的代码
    var http = require('http')
    var url = require('url')
    var ejs = require('ejs')
    var fs = require('fs')
    
    
    http.createServer(function(req, res){
      if (req.url == '/favicon.ico') return
    
      res.writeHead(200, {"Content-Type": "text/html;charset=UTF-8"})
      var pathname = url.parse(req.url).pathname
      var method = req.method.toLowerCase()
      if (pathname == '/login') {
        ejs.renderFile('views/form.ejs', {
          msg: '你好啊'
        }, (err, data)=>{
          if (err) {
            console.log(err)
            return
          }
          console.log(data)
          res.end(data)
        })
      } else if (pathname == '/dologin' && method == 'get') {
        /**
         * 获取数据
        */
        var query = url.parse(req.url).query
    
        console.log(query)
        res.end(query)
    
      }else if (pathname == '/dologin' && method == 'post') {
        /**
         * 获取数据
        */
        var postData = ''
        req.on('data', (data)=>{
          postData += data
        })
        req.on('end', (err, data)=>{
          fs.appendFile('login.txt', `${postData}\n`, (err, data)=>{
            if (err) {
              console.log(err)
              return
            }
            console.log('写入成功')
          })
          res.end(postData)
        })
    
      }else {
        ejs.renderFile('views/index.ejs', {
          msg: '你好啊'
        }, (err, data)=>{
          if (err) {
            console.log(err)
            return
          }
          res.end(data)
        })
      }
    }).listen('8089')
    
    console.log('server is Running at 8089')
    

    可见,是如此的复杂以及不人性化

    极不利于后期的维护工作

    接下来,对路由部分进行拆分

    新建model/models.js
    
    var ejs = require('ejs')
    var fs = require('fs')
    var url = require('url')
    
    
    var app = {
      index: function(req, res){
        console.log('主页')
        res.end('主页')
      },
      login: function(req, res){
        console.log('登录')
        ejs.renderFile('views/form.ejs',{},(err, data)=>{
          res.end(data)
        })
      },
      register: function(req, res){
        console.log('注册')
      },
      dologin: function(req, res) {
        var method = req.method.toLowerCase()
    
        if (method == 'get') {
          /**
           * 获取数据
          */
          var query = url.parse(req.url).query
    
          res.end(query)
        } else {
          /**
           * 获取数据
          */
          var postData = ''
          req.on('data', (data)=>{
            postData += data
          })
          req.on('end', (err, data)=>{
            fs.appendFile('login.txt', `${postData}\n`, (err, data)=>{
              if (err) {
                console.log(err)
                return
              }
              console.log('写入成功')
            })
            console.log(postData)
            res.end(postData)
          })
        }
    
      }
    }
    
    module.exports = app
    
    对index.js进行模块调用
    var http = require('http')
    
    var url = require('url')
    var model = require('./models/model')
    
    // model['register']('req')
    
    
    http.createServer(function(req, res){
      if (req.url == '/favicon.ico') return
      var pathname = url.parse(req.url).pathname.replace('/', '')
      try {
        model[pathname](req, res)
    
      } catch (error) {
        model['index'](req, res)
    
      }
    
      res.end()
    }).listen('8081')
    
    
    

    一下子,就好了很多

    在写代码的时候,一定不能只局限于本次需求的交付

    要考虑代码的可读性、可扩展性

    这就是模块化出现的意义

    相关文章

      网友评论

        本文标题:nodejs10-路由的封装(上)

        本文链接:https://www.haomeiwen.com/subject/dltcictx.html