Nodejs

NodeJS

  • NodeJS组成

    • ECMAScript 语法,功能
    • Node标准库 Node官方自带的功能API
    • Node第三方库 开发者在开发过程中封装的常用代码
  • 浏览器JS组成

    • ECMAScript 语法,功能
    • DOM 操作页面元素的API
    • BOM 操作浏览器功能的API

NodeJS和浏览器的js的区别

NodeJS是一个和浏览器完全不同的环境,NodeJS当初设计出来,目的就是为了写服务器的代码的,所以里面有很多功能浏览器是不具备的,同样,服务器环境下不需要的功能,Node环境下也不会有。

NodeJS标准库

fs模块

fs模块,是Node标准库中用于操作计算机上的文件的模块,提供了很多的方法,比如现在我们想从电脑上读取一个HTML文件,把内容返回给浏览器,就需要用到这个模块

语法:


举例:

// 1. 引入fs模块 , node里面几乎所有的标准库都要先引入才能使用
const fs = require('fs')
// 2. 调用readFile方法
fs.readFile('./page/index.html',(error,data)=>{
  console.log(data)
})


// 1. 引入fs模块 , node里面几乎所有的标准库都要先引入才能使用
const fs = require('fs')
// 2. 调用readFile方法 , 并指定编码
fs.readFile('./page/index.html','utf-8',(error,data)=>{
  console.log(data)
})

path模块

path.join

第一种方案可以使用path.join方法配合__dirname常量来实现

const path = require('path')
const dir = path.join(__dirname,'../page/index.html')

其中join的作用是把多个路径片段拼接到一起,并解决不同平台的字符兼容问题。__dirname是得到当前js文件所在目录的API

path.resolve

而第二种方案就简单得多,我们只需要给一个相对路径,就能得到一个绝对路径

const path = require('path')
const dir = path.resolve('../page/index.html')

小结:

  1. NodeJS里面提供了非常多的标准库(内置模块),要学会从文档中学习
  2. 相对路径是基于node命令执行的目录的,所以大家在执行node代码的时候要注意
  3. 建议在用到路径的地方使用path来得到绝对路径再使用

NodeJS服务器

服务器是一(多)台电脑,在这台电脑上面安装了一个服务器软件,让这台电脑可以为我们提供特定的服务。对于我们而言,服务器主要提供静态资源和动态数据。

注:通常我们不会把服务器电脑和服务器软件分开来说,一般说到服务器就是指两者的结合

IP :一台计算机在一个网络中的唯一地址

端口:一个软件在一台计算机上的唯一编号

小结:

  1. 服务器可以是指服务器电脑,也可以是指服务器软件
  2. web服务器主要提供静态资源和动态数据
  3. 请求通过ip识别服务器主机,通过端口识别服务器软件
  4. 服务器软件通过url识别请求的目的
  5. 上述内容都是由http协议规定的

使用nodejs写一个服务器

NodeJS实现一个服务器的代码

// 1. 引入http协议,node里面已经帮我们封装好了关于这部分的API
const http = require('http')
// 2. 创建一个服务器对象
const server = http.createServer()
// 3. 绑定ip和端口
server.listen(8080,'127.0.0.1')
// 4. 服务器对象监听浏览器的请求
server.on('request',(request,response)=>{
	// 5. 响应数据回浏览器
  response.end('<h1>hello world!!!</h1>')
})

通过上面的5行代码,我们就使用nodejs编写了一个服务器软件,只要开启起来,就能让浏览器请求,并得到返回的数据了。

中文乱码问题

http协议中规定,我们可以在响应头中返回数据解析方式和数据的编码格式。

response.setHeader('Content-Type','text/html;charset=utf-8')
response.end('<h1>你好,世界!!!</h1>')

返回静态数据

目前为止,我们已经可以实现服务器和浏览器的通信了,但是我们发现,返回的内存太过于简单了,也不像是我们平时开发的静态资源,所以我们需要用到fs模块来把我们写好的静态资源读取出来,并返回给浏览器。

const http = require('http')
// 引入fs模块
const fs = require('fs')
const server = http.createServer()
server.listen(8080,'127.0.0.1')
server.on('request',(request,response)=>{
  // 读取出来指定的文件
  fs.readFile('./views/index.html',(err,data)=>{
   // 调用 响应回浏览器的方法把页面内容返回浏览器 
    response.end(data)
  })
})

首先我们需要在服务器端把请求的url获取到:

server.on('request',(request,response)=>{
  // 得到浏览器请求的url
  console.log(request.url)
})

所以我们只需要在request事件里面判断请求的url,并读取不同的资源返回即可

server.on('request',(request,response)=>{
  // 返回index.html
	if(request.url === '/views/index.html'){
    // fs读取index.html , response.end() 返回
  }
  else if (request.url === '/views/list.html'){
    // fs读取list.html , response.end() 返回     
  }
  else if (request.url === '/css/index.css'){
    // fs读取index.css , response.end() 返回           
  }
})
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值