今天是学习node的第二天。事实上,我了解得越多,我就越觉得熟悉。它仅适用于节点。为什么,因为之前学过一点点云计算,当时觉得搞server和client没啥用。没想到能在这里用。至少服务器的概念一点都不陌生。看到npm也就不足为奇了。我当时用过。很好吃。1、今天我们首先看到了http模块,它也是node中最大的模块。内置模块的内容,http是创建web服务器的模块。在前端,不需要iis、Apache等第三方服务器软件,只需要一个node.js提供的http模块就可以写一个服务器。从这点来看,似乎node更强大。我们的服务器一般分为三个概念,ip、域名、端口。有了这三个,就可以访问服务器了。如何创建网络服务器?首先导入http内置模块constserver=http.createServer()这会创建一个服务器实例,然后给它绑定一个监听事件,可以监听客户端发送的请求server.on('request',(req,res)=>{})注意这个事件中有两个参数。这两个参数是什么意思?我们稍后再谈。绑定事件后,就可以启动服务器了server.listen('portNumber',callback)这里有两个参数,一个是填写端口号,另一个是服务器启动后的回调函数。consthttp=require('http')constserver=http.createServer()server.on('request',(req,res)=>console.log('someonevisitourwebServer'))server.listen(83,()=>console.log('打开成功'))在浏览器访问服务器后,会在服务器端弹出监听里面需要打印的信息https://img2022.cnblogs.com/b...1.1We接下来说说监听事件中的两个参数是什么?首先,第一个req对象是一个包含客户端相关数据和属性的对象。如果要记住访问的客户端,可以使用该对象中的属性和方法。req.url是客户端请求的url地址req.method是客户端的请求方式consthttp=require('http')constserver=http.createServer()server.on('request',req=>{consturl=req.urlconstmethod=req.methodconsole.log(`你的请求url是${url}并且你的请求方法是${method}`)//postrequestwithpostman})server.listen('80',()=>console.log('serverisrunninginhttp:127.0.0.1'))1.2然后是res对象,没错,他也是一个对象,是一个包含了server相关属性和数据res的对象。send()可以向客户端发送你要发送的内容,代表请求结束。如果发送的内容包含中文,还需要用res设置headercode,否则会出现乱码。consthttp=require('http')constserver=http.createServer()server.on('request',(req,res)=>{让str='你的请求url是'+req.url+'+你的请求方法是'+req.method+''res.end(str)})server.listen(80,()=>console.log('serveris运行在http://127.0.0.1'))1.3这里有一个案例,根据不同的url反映不同的页面,这个应该很经典//1.获取用户的urlconsthttp=require('http')constserver=http.createServer()server.on('request',(req,res)=>{leturl=req.url//2.将默认页面设置为404letcontent=`
404NotFound
`//3.判断用户是否请求主页if(url=='/'||url=='/index.html'){content=`
Homepage
`//}4.判断用户是否访问页面}elseif(url=='/son.html'){content=`
subpage
`}//5.设置请求头防止中文乱码res.setHeader('Content-Type','text/html;charset=utf-8')//6.发送内容并结束请求res.end(content)})server.listen(80,()=>console.log('你的请求运行在http://127.0.0.1'))2、接下来我们要看模块化。模块化是指在解决一个复杂的问题时,将系统从上到下分成若干层。模块的过程,对于整个系统来说,模块是可以组合、拆卸和更换的单元在我们的编程世界里,模块化就是遵守固定的规则,把一个大文件拆成独立又相互依赖的小模块,大家分工协作。Node.js模块分类?我们节点中的模块分为三个部分。第一个是内置模块:我们之前学过的就是内置模块,fs,path,http等。第二个是自定义模块:什么叫自定义模块,其实就是我们的js自己写的文件是自定义模块。三是第三方模块:是第三方开发的模块。需要提前下载好,然后需要加载我们的模块。require也会有模块作用域,也就是说,我们自定义模块中声明的变量函数是不能被外部模块访问的。那么有没有办法访问它呢?是的,对外共享模块成员的方法需要一个模块对象,它是每个js自定义模块中的内置对象,然后里面有个关键对象,exports,在我们前面,require这个时候获取到的内容自定义模块其实就是exports对象里面的内容,所以有时候是空的,因为exports没有赋值,是空对象,我们可以写成module.exports或者exportsmodule.exports={uname:'ZhangSan',sayHello:function(){console.log('hellonode');}}constmd=require('./moduleobjectsharing')console.log(md);但出口模块化有几点需要注意。永远记住,虽然他们无论是exports还是module.exports都能达到同样的效果,但他们始终以module.exports中的数据为准。为了防止混淆,exports和module.exports最好不要混用。模块化规范节点遵循commenJS模块化规范,包括我们前面说的module代表当前模块,exports是对外接口,require用于加载模块。commenJS是标准化的,但是我进了一点Vue,又被劝回来了。刚看到后面应该会遵循es6模块化规范,这个commenJS正在逐步被淘汰。3继续查看packages和npm的一些内容。首先要明确什么是包。第三方模块称为包。套餐由第三方个人和团队制作,全部免费。我们为什么要用包?该包基于内置模块进行封装,提供更高级、更方便的使用方式。其实就相当于jQuery和浏览器内置对象的关系。jq的ajax方法是通过xhr包传播的。如果使用我们传统的方法,即自定义模块的方法,我们首先看到一个npm格式化时间的案例。const模块对象共享=require("./moduleobjectsharing")functiontimeFormat(dataStr){letdate=newDate(dataStr)lety=date.getFullYear()letm=addZero(date.getMonth()+1)让d=addZero(date.getDate())让h=addZero(date.getDate())让mm=addZero(date.getDate())让s=addZero(date.getDate())返回`${y}-${m}-${d}${h}:${mm}:${s}`}functionaddZero(n){返回n=n<10?'0'+n:n}module.exports.timeFormat=timeFormatconsttime=require('./格式时间传统做法')//console.log(time);constdate=newDate()console.log(date);console.log(time.timeFormat(日期));这样就完成了一次时间格式化操作,还是有点繁琐,但是现在有了npm,就不一样了。你可以使用npm安装一个momentpackage,安装和导入查看文件api分三步升起。constmoment=require('moment')consttimer=moment().format('YYYY-MM-DDHH:mm:ss')console.log(timer);以前有多少代码,现在有多少,这就是为什么要用包。最后,当你安装包时,文件夹中多了两个文件。一个是node_modules文件夹,里面存放的是npm下载的包文件,另一个是pachage_lock.json的配置文件,里面是之前文件夹下npm下载的所有文件。包的两个详细信息都不能修改。最后,如果要安装指定版本的包,只需要在包名后面加上@版本号即可。