当前位置: 首页 > 后端技术 > Node.js

表达简单的实现

时间:2023-04-03 12:38:39 Node.js

express框架实现了consthttp=require("http");consturl=require("url");functioncreateApp(){varapp={};变种路线=[];//将所有请求方法写入app对象http.METHODS.forEach(method=>{method=method.toLocaleLowerCase();app[method]=(path,handler)=>{letroute={path,method,handler};routes.push(路线);};});//匹配剩下的路由app.all=(path,handler)=>{letroute={method:"all",path,handler};routes.push(路线);};//中间件app.use=(path,handler)=>{if(handler===undefined){handler=path;路径=“/”;}letroute={method:"middle",path,handler,}routes.push(route);}//服务letserver=http.createServer((req,res)=>{letmethod=req.method.toLocaleLowerCase();let{pathname}=url.parse(req.url,true);pathname=decodeURI(pathname);//循环路由,如果匹配则执行其处理函数//使用下一个函数let我=0;让next=()=>{if(i>=routes.length)返回;let{方法:m,路径:p,处理程序:h}=routes[i];我++;if(m==='middle'){//匹配中间件if(p=='/'||p==pathname||pathname.startsWith(p+'/')){h(req,res,next);}else{下一个();}}else{//匹配通用路由if((m==method||m=="all")&&(p==pathname||p==="*")){h(req,res);}else{下一个();}}}下一个();});app.listen=(...rest)=>{server.listen(...rest);};返回应用程序;}module.exports=createApp;静态资源服务实现constpath=require("path");constfs=require("fs");consturl=require('url');constmime={css:"文本/css",gif:"图像/gif",html:"文本/html",ico:"图像/x-icon",jpeg:"图像/jpeg",jpg:"图像/jpeg",js:"文本/javascript",json:"application/json",pdf:"application/pdf",png:"image/png",svg:"image/svg+xml",swf:"application/x-shockwave-flash",tiff:"image/tiff",txt:"text/plain",wav:"audio/x-wav",wma:"音频/x-ms-wma",wmv:"video/x-ms-wmv",xml:"text/xml",未知:"text/plain"};functionstatic(basename){return(req,res,next)=>{let{pathname}=url.parse(req.url,true);pathname=decodeURI(pathname);letp=path.resolve(path.join(basename,pathname));fs.stat(p,(err,stats)=>{if(err)next();if(stats&&stats.isFile()){letext=path.extname(p).slice(1);res.writeHead(200,{"内容-type":`${mime[ext]};charset=utf-8`})letrs=fs.createReadStream(p);rs.pipe(res);}else{next();}})}}module.exports=static;使用constcreateApp=require('./app/index');conststatic=require('./app/static');letapp=createApp();app.use(static('./static'));app.all('*',(req,res)=>{res.end('404');});app.listen(8080,'127.0.0.1');