nodejs项目实战教程08——创建静态Web服务器,高级程序员面试题

var http = require(‘http’);

http.createServer((req, res)=>{

// 1.获取地址

let pathname = req.url

// 过滤网站tab图标请求

if(pathname !== ‘/favicon.ico’){

console.log(pathname)

// 设置响应头

res.writeHead(200, {‘Content-Type’: ‘text/html;charset=“utf-8”’});

res.end(‘Hello World’);

}

}).listen(3000);

console.log(‘Server running at http://127.0.0.1:3000/’);

在这里插入图片描述

在这里插入图片描述

1.2 读取服务器上的资源文件

创建demo10项目,static文件夹下是网页的静态资源,其中,index.html文件引用到了css、img下的文件(详细的样式和图片资源并不重要,可以随便写,这里只是为了说明多文件的读取问题)。

在这里插入图片描述

index.html代码:

Document
你好
测试图片

如果本地直接双击打开,效果是这样滴:

在这里插入图片描述

现在我们要做的就是如何通过nodejs读取html及其引用的文件,并显示在服务器中。具体代码如下,app.js:

// 创建一个web服务器

// 1.可以访问web服务器上的网站

// 2.可以下载web服务器上的文件

const http = require(‘http’);

const fs = require(‘fs’)

const common = require(‘./module/common.js’)

const path = require(‘path’)

// common.gtFileMine(‘.css’)

http.createServer(function (req, res) {

// 1.获取地址

let pathname = req.url

// 解析地址,除去地址?后的字符

pathname = (pathname.split(‘?’))[0]

// 默认加载页面

pathname = pathname === ‘/’?‘/index.html’:pathname

// 获取文件后缀

let extname = path.extname(pathname)

// 2.通过fs模块读取文件

if(pathname !== ‘/favicon.ico’){

console.log(pathname)

// console.log(req)

fs.readFile(‘./static’ + pathname,(err,data)=>{

if(err){

res.writeHead(404, {‘Content-Type’: ‘text/html;charset=“utf-8”’});

res.end(‘这个页面不存在’);

}

// 根据路径后缀返回content-type

// let mime = common.getMime(extname);

let mime = common.gtFileMine(extname);

res.writeHead(200, {‘Content-Type’: ‘’+ mime +‘;charset=“utf-8”’});

// 3.返回路径下文件的内容

res.end(data);

})

}

}).listen(3000);

console.log(‘Server running at http://127.0.0.1:3000/’);

nodemon app.js 启动项目:

在这里插入图片描述

简要说明下app.js代码思路:

(1)进入到 http://127.0.0.1:3000/ ,默认加载static文件夹下的index.html文件

(2)加载index.html文件后,浏览器继续加载里面引用到的样式和图片等资源,对这些资源进行content-type的区分,如果继续使用res.writeHead(404, {'Content-Type': 'text/html;charset="utf-8"'});就无法正确加载除了html之外的资源文件。

(3)gtFileMine方法用于获取资源文件对应的资源类型,mime.json文件是所有资源文件对应的资源类型。

module/common.js:

const fs = require(‘fs’)

exports.getMime = function(extname){

switch(extname){

case ‘.html’:

return ‘text/html’;

case ‘.css’:

return ‘text/css’;

case ‘.js’:

return ‘text/javascript’;

default:

return ‘text/html’

}

}

exports.gtFileMine = function(extname){

// 同步获取数据

let data = fs.readFileSync(‘./data/mime.json’)

let mimeObj = JSON.parse(data.toString())

// 变量名属性只能通过数组的形式进行访问

console.log(mimeObj[extname])

return mimeObj[extname]

}

data/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” ,

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注前端)
img

最后

javascript是前端必要掌握的真正算得上是编程语言的语言,学会灵活运用javascript,将对以后学习工作有非常大的帮助。掌握它最重要的首先是学习好基础知识,而后通过不断的实战来提升我们的编程技巧和逻辑思维。这一块学习是持续的,直到我们真正掌握它并且能够灵活运用它。如果最开始学习一两遍之后,发现暂时没有提升的空间,我们可以暂时放一放。继续下面的学习,javascript贯穿我们前端工作中,在之后的学习实现里也会遇到和锻炼到。真正学习起来并不难理解,关键是灵活运用。

CodeChina开源项目:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

css源码pdf

JavaScript知识点

一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!

AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算

学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注前端)
[外链图片转存中…(img-pfmlj7FM-1712208750010)]

最后

javascript是前端必要掌握的真正算得上是编程语言的语言,学会灵活运用javascript,将对以后学习工作有非常大的帮助。掌握它最重要的首先是学习好基础知识,而后通过不断的实战来提升我们的编程技巧和逻辑思维。这一块学习是持续的,直到我们真正掌握它并且能够灵活运用它。如果最开始学习一两遍之后,发现暂时没有提升的空间,我们可以暂时放一放。继续下面的学习,javascript贯穿我们前端工作中,在之后的学习实现里也会遇到和锻炼到。真正学习起来并不难理解,关键是灵活运用。

CodeChina开源项目:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

[外链图片转存中…(img-g4CRQnDp-1712208750011)]

[外链图片转存中…(img-Bw1rA977-1712208750011)]

一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!

AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算

  • 7
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值