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')
一下子,就好了很多
在写代码的时候,一定不能只局限于本次需求的交付
要考虑代码的可读性、可扩展性
这就是模块化出现的意义