首先,先在头部引用需要用到的方法
const url = require("url") const fs = require("fs") const path = require("path")
创建一个函数,用于根据不同的文件类型获取不同的Content-Type
function getFileMime(extname) { let data = fs.readFileSync('./data/mime.json') let mimeObj = JSON.parse(data.toString()) return (mimeObj[extname]) }
然后创建一个函数,将静态web服务封装
function initStatic(req, res, staticPath) { //1、获取地址 let pathname = url.parse(req.url).pathname; //获取文件后缀名 let extname = path.extname(pathname); //当文件后缀名存在时,才继续执行下面的步骤 if (extname) { if (pathname != '/favicon.ico') { try { let data = fs.readFileSync('./' + staticPath + pathname); if (data) { let mime = getFileMime(extname); res.writeHead(200, { 'Content-Type': '' + mime + ';charset="utf-8"' }); res.end(data); } } catch (error) { console.log(error) } } } }
将请求都封装至一个函数内,最后再将这个函数暴露出去
function server() { //根据不同的请求,将方法进行区分 let G = { _get: {}, _post: {}, staticPath: ''//默认目录 } let app = (req, res) => { //配置静态web服务 initStatic(req, res, G.staticPath) let pathname = url.parse(req.url).pathname; let method = req.method.toLowerCase(); let extname = path.extname(pathname); if (!extname) { if (G['_' + method][pathname]) { if (method == "get") { G['_' + method][pathname](req, res);//执行get方法 } else { let postData = ''; req.on('data', (test) => { postData += test; }) req.on('end', () => { console.log(postData) //整理前端post的值 //console.log(querystring.parse(postData)); req.body = postData; G['_' + method][pathname](req, res);//执行post方法 }) } } else { res.writeHead(404, { 'Content-Type': 'text/html;charset="utf-8"' }); res.end("页面不存在") } } } app.get = function (str, cb) { //注册方法 G._get[str] = cb; } app.post = function (str, cb) { //注册方法 G._post[str] = cb; } //配置静态web服务 app.static = function (staticPath) { console.log(staticPath) G.staticPath = G.staticPath + staticPath } return app; } module.exports = server();
最后在外部调用时,一局以下格式即可调用get,post以及静态web服务方法
const http = require("http") const app = require('./module/test.js') //注册web服务 http.createServer(app).listen(3000); //执行静态web服务 app.static(""); console.log('Server running at http://127.0.0.1:3000/'); //配置路由 app.get('/test1',function(req,res){ res.writeHead(200, { 'Content-Type': 'text/html;charset="utf-8"' }); res.end("执行get请求成功") }) //配置路由 app.post('/test2',function(req,res){ res.writeHead(200, { 'Content-Type': 'text/html;charset="utf-8"' }); res.end(req.body) })