WEB前端程序开发Web 前端开发 我的日更计划

nodejs10-路由的封装(上)

2019-11-12  本文已影响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')


一下子,就好了很多

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

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

这就是模块化出现的意义

上一篇下一篇

猜你喜欢

热点阅读