nodejs 创建一个静态资源服务器 +路由

0、补充

1、Node.js 创建的第一个应用

1、引入 http 模块

 var http = require("http"); 

2、创建服务器 接下来我们使用 http.createServer() 方法创建服务器,并使用 listen 方法绑定 3000 端口。
函数通过 request, response 参数来接收和响应数据。

const http =require('http'); 
http.createServer((req,res)=>{ //状态码是 200,文件类型是 html,字符集是 utf-8 res.writeHead(200,{"Content-type":"text/html;charset='utf-8'"}); res.write("<head> <meta charset='UTF-8'></head>"); res.write('你好 nodejs'); res.write('<h2>你好 nodejs</h2>'); res.end(); //结束响应 
}).listen(3000);
2、WEB 服务器介绍

Web 服务器一般指网站服务器,是指驻留于因特网上某种类型计算机的程序,可以向 浏览器等 Web 客户端提供文档,也可以放置网站文件让全世界浏览,还可以放置数据文件, 让全世界下载。目前最主流的 Web 服务器有 Apache 、Nginx 、 IIS 等。

一、创建一个静态资源服务器

Nodejs 创建一个 WEB 服务器。
1、可以让我们访问 web 服务器上面的网站
在这里插入图片描述

2、可以让我们下载 web 服务器上面的文件
在这里插入图片描述

app.js:

// nodejs 创建一个静态资源服务器const http = require('http');
const fs = require('fs');
const path = require('path')
const url = require('url')
const common = require('./module/common')http.createServer(function (req, res) {// 1. 获取地址console.log(req.url)let pathname = url.parse(req.url).pathname// 默认加载index.htmlif(pathname == '/') {pathname = '/index.html'}else {pathname = pathname}// 获取路径中的后缀名let extname = path.extname(pathname)// 2.通过fs模块读取文件if(pathname != '/favicon.ico') {fs.readFile('./static' + pathname, async function(err, data) {if(err) {               res.writeHead(404, {'Content-Type': 'text/html;charset="utf-8"'});res.end('404 这个页面不存在');               }let mine = await common.getFileMime(extname)res.writeHead(200, {'Content-Type': ''+mine+';charset="utf-8"'});res.end(data);})}}).listen(8081);console.log('Server running at http://127.0.0.1:8081/');

common.js:

exports.getFileMime = function (extname) {switch (extname) {case '.html':return 'text/html';case '.css':return 'text/css';case '.js':return 'text/javascript';default:return 'text/html';}
}const fs = require('fs');exports.getFileMime = function (extname) {return new Promise(function(resolve,reject) {fs.readFile('./data/mime.json', function(err, data) {if(err) {console.log(err)rejects(err)return}let mimeObj = JSON.parse(data.toString())console.log(mimeObj[extname])resolve(mimeObj[extname])})})
}

mime.json:


{ ".323":"text/h323" ,".3gp":"video/3gpp" ,".aab":"application/x-authoware-bin" ,".aam":"application/x-authoware-map" ,".aas":"application/x-authoware-seg" ,".acx":"application/internet-property-stream" ,".ai":"application/postscript" ,".aif":"audio/x-aiff" ,".aifc":"audio/x-aiff" ,".aiff":"audio/x-aiff" ,".als":"audio/X-Alpha5" ,".amc":"application/x-mpeg" ,".ani":"application/octet-stream" ,".apk":"application/vnd.android.package-archive" ,".asc":"text/plain" ,".asd":"application/astound" ,".asf":"video/x-ms-asf" ,".asn":"application/astound" ,".asp":"application/x-asap" ,".asr":"video/x-ms-asf" ,".asx":"video/x-ms-asf" ,".au":"audio/basic" ,".avb":"application/octet-stream" ,".avi":"video/x-msvideo" ,".awb":"audio/amr-wb" ,".axs":"application/olescript" ,".bas":"text/plain" ,".bcpio":"application/x-bcpio" ,".bin ":"application/octet-stream" ,".bld":"application/bld" ,".bld2":"application/bld2" ,".bmp":"image/bmp" ,".bpk":"application/octet-stream" ,".bz2":"application/x-bzip2" ,".c":"text/plain" ,".cal":"image/x-cals" ,".cat":"application/vnd.ms-pkiseccat" ,".ccn":"application/x-cnc" ,".cco":"application/x-cocoa" ,".cdf":"application/x-cdf" ,".cer":"application/x-x509-ca-cert" ,".cgi":"magnus-internal/cgi" ,".chat":"application/x-chat" ,".class":"application/octet-stream" ,".clp":"application/x-msclip" ,".cmx":"image/x-cmx" ,".co":"application/x-cult3d-object" ,".cod":"image/cis-cod" ,".conf":"text/plain" ,".cpio":"application/x-cpio" ,".cpp":"text/plain" ,".cpt":"application/mac-compactpro" ,".crd":"application/x-mscardfile" ,".crl":"application/pkix-crl" ,".crt":"application/x-x509-ca-cert" ,".csh":"application/x-csh" ,".csm":"chemical/x-csml" ,".csml":"chemical/x-csml" ,".css":"text/css" ,".cur":"application/octet-stream" ,".dcm":"x-lml/x-evm" ,".dcr":"application/x-director" ,".dcx":"image/x-dcx" ,".der":"application/x-x509-ca-cert" ,".dhtml":"text/html" ,".dir":"application/x-director" ,".dll":"application/x-msdownload" ,".dmg":"application/octet-stream" ,".dms":"application/octet-stream" ,".doc":"application/msword" ,".docx":"application/vnd.openxmlformats-officedocument.wordprocessingml.document" ,".dot":"application/msword" ,".dvi":"application/x-dvi" ,".dwf":"drawing/x-dwf" ,".dwg":"application/x-autocad" ,".dxf":"application/x-autocad" ,".dxr":"application/x-director" ,".ebk":"application/x-expandedbook" ,".emb":"chemical/x-embl-dl-nucleotide" ,".embl":"chemical/x-embl-dl-nucleotide" ,".eps":"application/postscript" ,".epub":"application/epub+zip" ,".eri":"image/x-eri" ,".es":"audio/echospeech" ,".esl":"audio/echospeech" ,".etc":"application/x-earthtime" ,".etx":"text/x-setext" ,".evm":"x-lml/x-evm" ,".evy":"application/envoy" ,".exe":"application/octet-stream" ,".fh4":"image/x-freehand" ,".fh5":"image/x-freehand" ,".fhc":"image/x-freehand" ,".fif":"application/fractals" ,".flr":"x-world/x-vrml" ,".flv":"flv-application/octet-stream" ,".fm":"application/x-maker" ,".fpx":"image/x-fpx" ,".fvi":"video/isivideo" ,".gau":"chemical/x-gaussian-input" ,".gca":"application/x-gca-compressed" ,".gdb":"x-lml/x-gdb" ,".gif":"image/gif" ,".gps":"application/x-gps" ,".gtar":"application/x-gtar" ,".gz":"application/x-gzip" ,".h":"text/plain" ,".hdf":"application/x-hdf" ,".hdm":"text/x-hdml" ,".hdml":"text/x-hdml" ,".hlp":"application/winhlp" ,".hqx":"application/mac-binhex40" ,".hta":"application/hta" ,".htc":"text/x-component" ,".htm":"text/html" ,".html":"text/html" ,".hts":"text/html" ,".htt":"text/webviewhtml" ,".ice":"x-conference/x-cooltalk" ,".ico":"image/x-icon" ,".ief":"image/ief" ,".ifm":"image/gif" ,".ifs":"image/ifs" ,".iii":"application/x-iphone" ,".imy":"audio/melody" ,".ins":"application/x-internet-signup" ,".ips":"application/x-ipscript" ,".ipx":"application/x-ipix" ,".isp":"application/x-internet-signup" ,".it":"audio/x-mod" ,".itz":"audio/x-mod" ,".ivr":"i-world/i-vrml" ,".j2k":"image/j2k" ,".jad":"text/vnd.sun.j2me.app-descriptor" ,".jam":"application/x-jam" ,".jar":"application/java-archive" ,".java":"text/plain" ,".jfif":"image/pipeg" ,".jnlp":"application/x-java-jnlp-file" ,".jpe":"image/jpeg" ,".jpeg":"image/jpeg" ,".jpg":"image/jpeg" ,".jpz":"image/jpeg" ,".js":"application/x-javascript" ,".jwc":"application/jwc" ,".kjx":"application/x-kjx" ,".lak":"x-lml/x-lak" ,".latex":"application/x-latex" ,".lcc":"application/fastman" ,".lcl":"application/x-digitalloca" ,".lcr":"application/x-digitalloca" ,".lgh":"application/lgh" ,".lha":"application/octet-stream" ,".lml":"x-lml/x-lml" ,".lmlpack":"x-lml/x-lmlpack" ,".log":"text/plain" ,".lsf":"video/x-la-asf" ,".lsx":"video/x-la-asf" ,".lzh":"application/octet-stream" ,".m13":"application/x-msmediaview" ,".m14":"application/x-msmediaview" ,".m15":"audio/x-mod" ,".m3u":"audio/x-mpegurl" ,".m3url":"audio/x-mpegurl" ,".m4a":"audio/mp4a-latm" ,".m4b":"audio/mp4a-latm" ,".m4p":"audio/mp4a-latm" ,".m4u":"video/vnd.mpegurl" ,".m4v":"video/x-m4v" ,".ma1":"audio/ma1" ,".ma2":"audio/ma2" ,".ma3":"audio/ma3" ,".ma5":"audio/ma5" ,".man":"application/x-troff-man" ,".map":"magnus-internal/imagemap" ,".mbd":"application/mbedlet" ,".mct":"application/x-mascot" ,".mdb":"application/x-msaccess" ,".mdz":"audio/x-mod" ,".me":"application/x-troff-me" ,".mel":"text/x-vmel" ,".mht":"message/rfc822" ,".mhtml":"message/rfc822" ,".mi":"application/x-mif" ,".mid":"audio/mid" ,".midi":"audio/midi" ,".mif":"application/x-mif" ,".mil":"image/x-cals" ,".mio":"audio/x-mio" ,".mmf":"application/x-skt-lbs" ,".mng":"video/x-mng" ,".mny":"application/x-msmoney" ,".moc":"application/x-mocha" ,".mocha":"application/x-mocha" ,".mod":"audio/x-mod" ,".mof":"application/x-yumekara" ,".mol":"chemical/x-mdl-molfile" ,".mop":"chemical/x-mopac-input" ,".mov":"video/quicktime" ,".movie":"video/x-sgi-movie" ,".mp2":"video/mpeg" ,".mp3":"audio/mpeg" ,".mp4":"video/mp4" ,".mpa":"video/mpeg" ,".mpc":"application/vnd.mpohun.certificate" ,".mpe":"video/mpeg" ,".mpeg":"video/mpeg" ,".mpg":"video/mpeg" ,".mpg4":"video/mp4" ,".mpga":"audio/mpeg" ,".mpn":"application/vnd.mophun.application" ,".mpp":"application/vnd.ms-project" ,".mps":"application/x-mapserver" ,".mpv2":"video/mpeg" ,".mrl":"text/x-mrml" ,".mrm":"application/x-mrm" ,".ms":"application/x-troff-ms" ,".msg":"application/vnd.ms-outlook" ,".mts":"application/metastream" ,".mtx":"application/metastream" ,".mtz":"application/metastream" ,".mvb":"application/x-msmediaview" ,".mzv":"application/metastream" ,".nar":"application/zip" ,".nbmp":"image/nbmp" ,".nc":"application/x-netcdf" ,".ndb":"x-lml/x-ndb" ,".ndwn":"application/ndwn" ,".nif":"application/x-nif" ,".nmz":"application/x-scream" ,".nokia-op-logo":"image/vnd.nok-oplogo-color" ,".npx":"application/x-netfpx" ,".nsnd":"audio/nsnd" ,".nva":"application/x-neva1" ,".nws":"message/rfc822" ,".oda":"application/oda" ,".ogg":"audio/ogg" ,".oom":"application/x-AtlasMate-Plugin" ,".p10":"application/pkcs10" ,".p12":"application/x-pkcs12" ,".p7b":"application/x-pkcs7-certificates" ,".p7c":"application/x-pkcs7-mime" ,".p7m":"application/x-pkcs7-mime" ,".p7r":"application/x-pkcs7-certreqresp" ,".p7s":"application/x-pkcs7-signature" ,".pac":"audio/x-pac" ,".pae":"audio/x-epac" ,".pan":"application/x-pan" ,".pbm":"image/x-portable-bitmap" ,".pcx":"image/x-pcx" ,".pda":"image/x-pda" ,".pdb":"chemical/x-pdb" ,".pdf":"application/pdf" ,".pfr":"application/font-tdpfr" ,".pfx":"application/x-pkcs12" ,".pgm":"image/x-portable-graymap" ,".pict":"image/x-pict" ,".pko":"application/ynd.ms-pkipko" ,".pm":"application/x-perl" ,".pma":"application/x-perfmon" ,".pmc":"application/x-perfmon" ,".pmd":"application/x-pmd" ,".pml":"application/x-perfmon" ,".pmr":"application/x-perfmon" ,".pmw":"application/x-perfmon" ,".png":"image/png" ,".pnm":"image/x-portable-anymap" ,".pnz":"image/png" ,".pot,":"application/vnd.ms-powerpoint" ,".ppm":"image/x-portable-pixmap" ,".pps":"application/vnd.ms-powerpoint" ,".ppt":"application/vnd.ms-powerpoint" ,".pptx":"application/vnd.openxmlformats-officedocument.presentationml.presentation" ,".pqf":"application/x-cprplayer" ,".pqi":"application/cprplayer" ,".prc":"application/x-prc" ,".prf":"application/pics-rules" ,".prop":"text/plain" ,".proxy":"application/x-ns-proxy-autoconfig" ,".ps":"application/postscript" ,".ptlk":"application/listenup" ,".pub":"application/x-mspublisher" ,".pvx":"video/x-pv-pvx" ,".qcp":"audio/vnd.qcelp" ,".qt":"video/quicktime" ,".qti":"image/x-quicktime" ,".qtif":"image/x-quicktime" ,".r3t":"text/vnd.rn-realtext3d" ,".ra":"audio/x-pn-realaudio" ,".ram":"audio/x-pn-realaudio" ,".rar":"application/octet-stream" ,".ras":"image/x-cmu-raster" ,".rc":"text/plain" ,".rdf":"application/rdf+xml" ,".rf":"image/vnd.rn-realflash" ,".rgb":"image/x-rgb" ,".rlf":"application/x-richlink" ,".rm":"audio/x-pn-realaudio" ,".rmf":"audio/x-rmf" ,".rmi":"audio/mid" ,".rmm":"audio/x-pn-realaudio" ,".rmvb":"audio/x-pn-realaudio" ,".rnx":"application/vnd.rn-realplayer" ,".roff":"application/x-troff" ,".rp":"image/vnd.rn-realpix" ,".rpm":"audio/x-pn-realaudio-plugin" ,".rt":"text/vnd.rn-realtext" ,".rte":"x-lml/x-gps" ,".rtf":"application/rtf" ,".rtg":"application/metastream" ,".rtx":"text/richtext" ,".rv":"video/vnd.rn-realvideo" ,".rwc":"application/x-rogerwilco" ,".s3m":"audio/x-mod" ,".s3z":"audio/x-mod" ,".sca":"application/x-supercard" ,".scd":"application/x-msschedule" ,".sct":"text/scriptlet" ,".sdf":"application/e-score" ,".sea":"application/x-stuffit" ,".setpay":"application/set-payment-initiation" ,".setreg":"application/set-registration-initiation" ,".sgm":"text/x-sgml" ,".sgml":"text/x-sgml" ,".sh":"application/x-sh" ,".shar":"application/x-shar" ,".shtml":"magnus-internal/parsed-html" ,".shw":"application/presentations" ,".si6":"image/si6" ,".si7":"image/vnd.stiwap.sis" ,".si9":"image/vnd.lgtwap.sis" ,".sis":"application/vnd.symbian.install" ,".sit":"application/x-stuffit" ,".skd":"application/x-Koan" ,".skm":"application/x-Koan" ,".skp":"application/x-Koan" ,".skt":"application/x-Koan" ,".slc":"application/x-salsa" ,".smd":"audio/x-smd" ,".smi":"application/smil" ,".smil":"application/smil" ,".smp":"application/studiom" ,".smz":"audio/x-smd" ,".snd":"audio/basic" ,".spc":"application/x-pkcs7-certificates" ,".spl":"application/futuresplash" ,".spr":"application/x-sprite" ,".sprite":"application/x-sprite" ,".sdp":"application/sdp" ,".spt":"application/x-spt" ,".src":"application/x-wais-source" ,".sst":"application/vnd.ms-pkicertstore" ,".stk":"application/hyperstudio" ,".stl":"application/vnd.ms-pkistl" ,".stm":"text/html" ,".svg":"image/svg+xml" ,".sv4cpio":"application/x-sv4cpio" ,".sv4crc":"application/x-sv4crc" ,".svf":"image/vnd" ,".svg":"image/svg+xml" ,".svh":"image/svh" ,".svr":"x-world/x-svr" ,".swf":"application/x-shockwave-flash" ,".swfl":"application/x-shockwave-flash" ,".t":"application/x-troff" ,".tad":"application/octet-stream" ,".talk":"text/x-speech" ,".tar":"application/x-tar" ,".taz":"application/x-tar" ,".tbp":"application/x-timbuktu" ,".tbt":"application/x-timbuktu" ,".tcl":"application/x-tcl" ,".tex":"application/x-tex" ,".texi":"application/x-texinfo" ,".texinfo":"application/x-texinfo" ,".tgz":"application/x-compressed" ,".thm":"application/vnd.eri.thm" ,".tif":"image/tiff" ,".tiff":"image/tiff" ,".tki":"application/x-tkined" ,".tkined":"application/x-tkined" ,".toc":"application/toc" ,".toy":"image/toy" ,".tr":"application/x-troff" ,".trk":"x-lml/x-gps" ,".trm":"application/x-msterminal" ,".tsi":"audio/tsplayer" ,".tsp":"application/dsptype" ,".tsv":"text/tab-separated-values" ,".ttf":"application/octet-stream" ,".ttz":"application/t-time" ,".txt":"text/plain" ,".uls":"text/iuls" ,".ult":"audio/x-mod" ,".ustar":"application/x-ustar" ,".uu":"application/x-uuencode" ,".uue":"application/x-uuencode" ,".vcd":"application/x-cdlink" ,".vcf":"text/x-vcard" ,".vdo":"video/vdo" ,".vib":"audio/vib" ,".viv":"video/vivo" ,".vivo":"video/vivo" ,".vmd":"application/vocaltec-media-desc" ,".vmf":"application/vocaltec-media-file" ,".vmi":"application/x-dreamcast-vms-info" ,".vms":"application/x-dreamcast-vms" ,".vox":"audio/voxware" ,".vqe":"audio/x-twinvq-plugin" ,".vqf":"audio/x-twinvq" ,".vql":"audio/x-twinvq" ,".vre":"x-world/x-vream" ,".vrml":"x-world/x-vrml" ,".vrt":"x-world/x-vrt" ,".vrw":"x-world/x-vream" ,".vts":"workbook/formulaone" ,".wav":"audio/x-wav" ,".wax":"audio/x-ms-wax" ,".wbmp":"image/vnd.wap.wbmp" ,".wcm":"application/vnd.ms-works" ,".wdb":"application/vnd.ms-works" ,".web":"application/vnd.xara" ,".wi":"image/wavelet" ,".wis":"application/x-InstallShield" ,".wks":"application/vnd.ms-works" ,".wm":"video/x-ms-wm" ,".wma":"audio/x-ms-wma" ,".wmd":"application/x-ms-wmd" ,".wmf":"application/x-msmetafile" ,".wml":"text/vnd.wap.wml" ,".wmlc":"application/vnd.wap.wmlc" ,".wmls":"text/vnd.wap.wmlscript" ,".wmlsc":"application/vnd.wap.wmlscriptc" ,".wmlscript":"text/vnd.wap.wmlscript" ,".wmv":"audio/x-ms-wmv" ,".wmx":"video/x-ms-wmx" ,".wmz":"application/x-ms-wmz" ,".wpng":"image/x-up-wpng" ,".wps":"application/vnd.ms-works" ,".wpt":"x-lml/x-gps" ,".wri":"application/x-mswrite" ,".wrl":"x-world/x-vrml" ,".wrz":"x-world/x-vrml" ,".ws":"text/vnd.wap.wmlscript" ,".wsc":"application/vnd.wap.wmlscriptc" ,".wv":"video/wavelet" ,".wvx":"video/x-ms-wvx" ,".wxl":"application/x-wxl" ,".x-gzip":"application/x-gzip" ,".xaf":"x-world/x-vrml" ,".xar":"application/vnd.xara" ,".xbm":"image/x-xbitmap" ,".xdm":"application/x-xdma" ,".xdma":"application/x-xdma" ,".xdw":"application/vnd.fujixerox.docuworks" ,".xht":"application/xhtml+xml" ,".xhtm":"application/xhtml+xml" ,".xhtml":"application/xhtml+xml" ,".xla":"application/vnd.ms-excel" ,".xlc":"application/vnd.ms-excel" ,".xll":"application/x-excel" ,".xlm":"application/vnd.ms-excel" ,".xls":"application/vnd.ms-excel" ,".xlsx":"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" ,".xlt":"application/vnd.ms-excel" ,".xlw":"application/vnd.ms-excel" ,".xm":"audio/x-mod" ,".xml":"text/plain",".xml":"application/xml",".xmz":"audio/x-mod" ,".xof":"x-world/x-vrml" ,".xpi":"application/x-xpinstall" ,".xpm":"image/x-xpixmap" ,".xsit":"text/xml" ,".xsl":"text/xml" ,".xul":"text/xul" ,".xwd":"image/x-xwindowdump" ,".xyz":"chemical/x-pdb" ,".yz1":"application/x-yz1" ,".z":"application/x-compress" ,".zac":"application/x-zaurus-zac" ,".zip":"application/zip" ,".json":"application/json"
}

在这里插入图片描述
在这里插入图片描述

二、Nodejs 封装静态 web 服务

对上面的静态资源服务进行封装:
在这里插入图片描述
在这里插入图片描述

routes.js :


const http = require('http');
const fs = require('fs');
const path = require('path')
const url = require('url')let getFileMime = function (extname) {return new Promise(function(resolve,reject) {fs.readFile('./data/mime.json', function(err, data) {if(err) {console.log(err)rejects(err)return}let mimeObj = JSON.parse(data.toString())console.log(mimeObj[extname])resolve(mimeObj[extname])})})
}exports.static = function(req, res, staticPath) {// 1. 获取地址console.log(req.url)let pathname = url.parse(req.url).pathname// 默认加载index.htmlif(pathname == '/') {pathname = '/index.html'}else {pathname = pathname}// 获取路径中的后缀名let extname = path.extname(pathname)// 2.通过fs模块读取文件if(pathname != '/favicon.ico') {fs.readFile('./'+ staticPath + pathname, async function(err, data) {if(err) {               res.writeHead(404, {'Content-Type': 'text/html;charset="utf-8"'});res.end('404 这个页面不存在');               }let mine = await getFileMime(extname)res.writeHead(200, {'Content-Type': ''+mine+';charset="utf-8"'});res.end(data);})}}

app.js :

// nodejs 创建一个静态资源服务器const http = require('http');
const routes =require('./module/routes')http.createServer(function (req, res) {// 创建静态web服务器routes.static(req, res , 'static')}).listen(8081);console.log('Server running at http://127.0.0.1:8081/');

三、 路由

官方解释: 路由(Routing)是由一个 URI(或者叫路径)和一个特定的 HTTP 方法(GET、POST 等)组成
的,涉及到应用如何响应客户端对某个网站节点的访问。
通俗的说: 路由指的就是针对不同请求的 URL,处理不同的业务逻辑。
在这里插入图片描述

在上面代码的基础上,增加路由功能,除此之外还需要把读取文件操作由异步改为同步!
在这里插入图片描述
在这里插入图片描述

app.js :

// nodejs 创建一个静态资源服务器const http = require('http');
const url = require('url')
const routes = require('./module/routes')http.createServer(function (req, res) {// 创建静态web服务器routes.static(req, res, 'static')// 路由let pathname = url.parse(req.url).pathname;if (pathname == '/login') {res.writeHead(200, { 'Content-Type': 'text/html;charset="utf-8"' });res.end("执行登录")} else if (pathname == '/register') {res.writeHead(200, { 'Content-Type': 'text/html;charset="utf-8"' });res.end("执行注册")} else if (pathname == '/admin') {res.writeHead(200, { 'Content-Type': 'text/html;charset="utf-8"' });res.end("处理客户端的业务逻辑")} else {res.writeHead(404, { 'Content-Type': 'text/html;charset="utf-8"' });res.end("页面不存在")}}).listen(8081);console.log('Server running at http://127.0.0.1:8081/');

routes.js :


const http = require('http');
const fs = require('fs');
const path = require('path')
const url = require('url')let getFileMime = function (extname) {// 把异步读取文件方法改为同步读取文件方法let data = fs.readFileSync('./data/mime.json');let mimeObj = JSON.parse(data.toString())console.log(mimeObj[extname])return mimeObj[extname]}exports.static = function (req, res, staticPath) {// 1. 获取地址console.log(req.url)let pathname = url.parse(req.url).pathname// 默认加载index.htmlif (pathname == '/') {pathname = '/index.html'} else {pathname = pathname}// 获取路径中的后缀名let extname = path.extname(pathname)// 2.通过fs模块读取文件if (pathname != '/favicon.ico') {try {// 把异步读取文件方法改为同步读取文件方法let data = fs.readFileSync('./' + staticPath + pathname);if (data) {let mine = getFileMime(extname)res.writeHead(200, { 'Content-Type': '' + mine + ';charset="utf-8"' });res.end(data);}} catch (error) {}}
}

在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/470755.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python输出字体的大小_Python密码学编程:文件的加密与解密

在之前的章节中&#xff0c;编写的程序只能操作较少的信息&#xff0c;这些信息往往是以字符串的形式直接写在代码中的。但本章中的程序可以对整个文件进行加密和解密&#xff0c;文件的大小可以包括成千上万个字符。本章要点open()方法。读、写文件。write()、close()及read()…

电脑k歌软件_金麦客专业k歌app下载|金麦客专业k歌软件 手机安卓版v1.1.5.0 下载...

金麦客专业k歌app能够让用户通过手机直接连接电视&#xff0c;从而在安卓端实现金麦客点歌的目的&#xff0c;平台包含上万高清mv资源&#xff0c;让用户在歌唱时能够更好的代入氛围中&#xff0c;并且还能通过网络直接搜歌&#xff0c;从而在线下载播放&#xff0c;用户在演唱…

Nodejs ejs模板引擎

官方网站&#xff1a;https://www.npmjs.com/package/ejs 我们学的 EJS 是后台模板&#xff0c;可以把我们数据库和文件读取的数据显示到 Html 页面上面。它 是一个第三方模块&#xff0c;需要通过 npm 安装 npm install ejs –save 或者 cnpm install ejs --saveNodejs 中使用…

linux can总线接收数据串口打包上传_关于串口,你需要知道这些!!

嵌入式设备在电路中交换信息的时候必须通过共享一个通用的协议。现在嵌入式系统中已经定义了数百种通信协议来实现数据交换&#xff0c;一般来说可以将其分为两类&#xff1a;并行或串行。并行传输数据是指同时传输多个数据位&#xff0c;它们通常需要数据线和时钟线配合工作&a…

div里嵌套了img底部会有白块问题和图片一像素问题解决

div里嵌套了img底部会有白块 因为img默认是按基线(baseline)对齐的。对比一下图片和右边的p, q, y等字母&#xff0c;你会发现这三个字母的“小尾巴”和图片下方的空白一样高。下面这张图中的黑线就是那条基线。 解决方案&#xff1a;一&#xff1a;vertical-align: bottom&…

Nodejs 中的Get、Post

Get、Post 超文本传输协议&#xff08;HTTP&#xff09;的设计目的是保证客户端机器与服务器之间的通信。 在客户端和服务器之间进行请求-响应时&#xff0c;两种最常被用到的方法是&#xff1a;GET 和 POST。 GET - 从指定的资源请求数据。&#xff08;一般用于获取数据&#…

电脑故障扫描修复软件_电脑故障分析:电脑安装软件提示没有权限的解决方法...

我们安装软件时如果没有权限就会导致安装故障&#xff0c;最近就有用户安装软件的时候出现了无法将数值写入键software的错误提示&#xff0c;请验证您对该键拥有足够的访问权限&#xff0c;或者与您的技术支持人员联系。那么遇到这种问题该怎么办呢&#xff1f;接下来就让我们…

Nodejs 路由封装 封装一个类似 express 的路由

1、模块化的方式封装 routes.js: const http require(http); const fs require(fs); const path require(path) const url require(url) const ejs require(ejs) let getFileMime function (extname) {// 把异步读取文件方法改为同步读取文件方法let data fs.readFileSy…

天翼网关 ddns设置_19,微服务网关之Zuul

这一次给大家分享微服务网关的相关知识&#xff0c;这个也是微服务架构中&#xff0c;相当重要的组件之一&#xff0c;来&#xff0c;下面听我徐徐道来1&#xff0c;API网关概览1.1&#xff0c;现有的交互模式存在什么问题&#xff1f;目前&#xff0c;是客户端会直接跟多个微服…

MongoDB 数据库创建、删除、表(集合) 创建删除、数据的增、删、改、查

一、 连接数据库 1、连接数据库 清屏命令&#xff1a;cls 查看所有数据库列表:show dbs 二、 创建数据库、查看、删除数据库 1、使用数据库、创建数据库 use itying 如果真的想把这个数据库创建成功&#xff0c;那么必须插入一个数据。 数据库中不能直接插入数据&#xff0…

从LeetCode 210. Course Schedule II 了解拓扑排序

问题简述 给定n节课&#xff0c;每节课按0~n-1编号。 在修某些课的时候需要有其它课的基础&#xff0c;必须先上先修课。现在用pair的形式来表示要先修的课&#xff0c;比如 [ [0,1], [1,2] ] 就表示在修课程1之前必须先修课程0&#xff0c;修课程2之前必须修课程1。现在需要给…

MongoDb 大数据查询优化、 MongoDB 索引、复合索引、唯一索引、 explain 分 析查询速度

一、索引基础 索引是对数据库表中一列或多列的值进行排序的一种结构&#xff0c;可以让我们查询数据库变得 更快。 MongoDB 的索引几乎与传统的关系型数据库一模一样&#xff0c;这其中也包括一些基本的查询优化技巧。 下面是创建索引的命令&#xff1a; db.user.ensureIndex…

ipconfig不是内部或外部_晶振有什么作用,如何选择合适的晶振,为什么有时候用内部晶振?...

一、 什么是晶振晶振&#xff0c;全名叫"晶体振荡器"&#xff0c;它在电路当中起到产生振荡频率的作用&#xff0c;我们都知道&#xff0c;单片机可以看成是在时钟驱动下的时序逻辑电路&#xff0c;那么这个所需要的时钟就是晶振来产生&#xff0c;可以说它的单片机的…

Mongodb 账户权限配置

Mongodb 账户权限配置 1、第一步创建超级管理用户 use admindb.createUser({ user:admin, pwd:admin, roles:[{role:root,db:admin}] })2、第二步修改 Mongodb 数据库配置文件 默认路径&#xff1a;路径&#xff1a;C:\Program Files\MongoDB\Server\4.0\bin\mongod.cfg 打开…

笔记本电脑关机快捷键_2020年双十一值得入手的高性价比笔记本电脑外设推荐...

本文更新日期&#xff1a;2020.10.21 篇幅较长&#xff0c;请提前收藏关注电脑外设就是除主机外的大部分硬件设备都可称作外部设备&#xff0c;或叫外围设备&#xff0c;简称外设。计算机系统没有输入输出设备&#xff0c;就如计算机系统没有软件一样&#xff0c;是毫无意义的。…

MongoDB 的高级查询 aggregate 聚合管道

一、MongoDB 聚合管道&#xff08;Aggregation Pipeline&#xff09; 使用聚合管道可以对集合中的文档进行变换和组合。 实际项目&#xff1a;表关联查询、数据的统计。 MongoDB 中使用 db.COLLECTION_NAME.aggregate([{<stage>},...]) 方法 来构建和使用聚合管道。 先…

python函数在传参的时候,到底在传些什么?

C这样的语言用多了之后&#xff0c;在Python函数传递参数的时候&#xff0c;经常会遇到一个问题&#xff0c;我要传递一个引用怎么办&#xff1f; 比如我们想要传一个x到函数中做个运算改变x的值&#xff1a; def change(y):y 1x 1 print ("before change:", x) …

android学习笔记五。2、其他组件

一、ContentProvider内容提供者.是是android中一个应用向第三方共享数据的方式,android中的联系人,sms(短信记录)等都是通过这一方式来向外提供的 1、使用&#xff1a; 在应用中使用ContentProvider提供的数据并不是直接使用的,而是需要通过ContentResolver来实现的,ContentRes…

一维条形码识别c语言_条形码的优点

条形码是迄今为止最经济、实用的一种自动识别技术。条形码技术具有以下几个方面的优点A&#xff0e;输入速度快&#xff1a;与键盘输入相比&#xff0c;条形码输入的速度是键盘输入的5倍&#xff0c;并且能实现“即时数据输入”。B&#xff0e;可靠性高&#xff1a;键盘 输入数…

气象数据领航无人飞行器线路优化大赛解决方案(3rd place)

1 队伍介绍 队伍名称&#xff1a;酒后写诗 队伍成员&#xff1a;陈权、林望黎、黄章炜 队伍名次&#xff1a;3 / 1646 2 问题简介 这个问题说起来其实挺简单&#xff08;但实现起来困难重重&#xff09;&#xff0c;就是提供了气象局得到的10个模型的预测数据&#xff08;…