非原创
本文转自https://github.com/a415432669/-front_end_notebook/tree/master/Node/day6/%E6%96%87%E6%A1%A3
目标:
let app = new lcApp();
app.on('/', (req, res) => {
res.end("这是首页");
})
app.on('/dlam', (req, res) => {
res.end("dlam");
})
app.run(80, () => {
console.log("成功运行");
})
当前:
let server = http.createServer();
server.on('request', function (req, res) {
// 根据路径信息,显示不同的页面内容
if (req.url == "/") {
res.setHeader('Content-Type', 'text/html; charset=UTF-8');
res.end('首页');
} else if (req.url == "/dlam") {
res.setHeader('Content-Type', getContentType(urlObj.ext));
let rs = fs.createReadStream('./static/' + url.base)
res.pipe(res);
} else {
res.setHeader('Content-Type', 'text/html; charset=UTF-8');
res.end('服务器请求失败');
}
})
server.listen(80)
封装:
1.构造函数能够实例化app对象
2.app.on,可以添加路由事件,根据请求的路径,去执行不同的内容
3.app.run(port,callback),让服务器运行起来
静态渲染
LcApp.js
let http = require('http');
let path = require('path');
let url = require('url');
let fs = require('fs');
class LcApp {
constructor() {
this.server = http.createServer();
this.reqEvent = {};
this.staticDir = 'static';
this.server.on('request', (req, res) => {
// 解析路径
let pathObj = path.parse(req.url);
console.log(pathObj);
if (pathObj.dir in this.reqEvent) {
req.pathObj = pathObj;
this.reqEvent[pathObj.dir](req, res);
} else if (pathObj.dir == this.staticDir) {
res.setHeader("content-type", this.getContentType(pathObj.ext))
//从服务器磁盘中读取文件,并输出到响应对象中
let rs = fs.createReadStream('./static/' + pathObj.base)
rs.pipe(res)
} else {
res.setHeader("Content-type", "text/html;charset=utf-8");
res.end("<h1>404!找不到页面</h1>")
}
})
}
on(url, fn) {
this.reqEvent[url] = fn;
}
run(port, callback) {
this.server.listen(port, callback)
}
getContentType(extName) {
switch (extName) {
case ".jpg":
return "image/jpeg";
case ".html":
return "text/html;charset=utf-8";
case ".js":
return "text/javascript;charset=utf-8";
case ".json":
return "text/json;charset=utf-8";
case ".gif":
return "image/gif";
case ".css":
return "text/css"
}
}
}
module.exports = LcApp;
server.js
let LcApp = require('./lcApp');
let app = new LcApp();
// 好处:保护路径,防止被修改
app.staticDir = '/abc';
app.on('/', (req, res) => {
res.setHeader("Content-type", "text/html;charset=utf-8");
res.end("这是首页<img src='./abc/1.jpg' />");
})
app.on('/dlam', (req, res) => {
if (req.pathObj.base == "index") {
res.end("dlam");
} else {
res.end("dlamaaaa");
}
})
app.run(80, () => {
console.log("服务器启动:", "http://127.0.0.1");
})