Node是什么?

一.Node是什么?

1.Node.js是一个JavaScript运行时环境(可以解析和执行JavaScript代码)

2.现在的JavaScript可以完全脱离浏览器来运行,一切都归功于Node.js

3.浏览器中的JavaScript包括EcmaScript、BOM、DOM

4.Node.js中的JavaScript :没有BOM、DOM,用EcmaScript进行编码,主要是在Node这个JavaScript执行环境中为JavaScript提供一些服务器级别的API操作(例如文件读写、网络服务的构建、网络通信、http服务器等处理)

5.Node.js特性是 使用事件驱动、非阻塞IO模型(异步),使得其轻量和高效

6.npm是基于Node.js开发出来的包管理工具,npm是世界上最大的开源库生态系统,绝大多数js相关的包都存放在npm上,方便开发人员下载使用

7.Google Chrome的V8引擎是目前公认的解析执行JavaScript代码最快的,Node.js构建在Google Chrome的V8引擎之上,是一个独立的JavaScript运行时环境

8.Node.js能做的事:Web服务器后台、命令行工具(npm、git、hexo)

二.使用Node执行js脚本文件

1.创建编写JavaScript脚本文件

2.打开终端,定位到脚本文件所属目录

3.输入 node 文件名 来执行对应的脚本文件

注:①命令dir是用来显示文件或目录的命令 ②文件名不要用 node.js来命名,最好也不要使用中文命名 ③浏览器端口默认为80

三.使用Node创建简单的http服务

1.搭建服务器

//在 Node 中专门提供了一个核心模块:http,可以非常轻松的构建一个web服务器
//1.加载http核心模块
var http = require('http')
//2.使用http.createServer()方法创建一个Web服务器,返回一个Server实例
var server = http.createServer()
//3.接收请求、处理请求、给个反馈(发送相应)
//当客户端请求过来,就会自动触发服务器的request请求事件,然后执行第二个参数:回调处理
 server.on('request',function(){
    console.log('收到客户端的请求了')
})
// 4.绑定端口号,启动服务器
server.listen(3000,function(){
    console.log('服务器启动成功了,可以通过 http://127.0.0.1:3000/ 来进行访问')
})



http状态码
/*
1xx:请求正常,需要请求者继续执行操作
2xx:请求成功,操作被成功接收并处理
3xx:展示出现问题,需要进一步的操作以完成请求
4xx:客户端出现系统,请求包含语法错误或无法完成请求
5xx:服务器发生错误,服务器在处理请求的过程中发生了错误
*/ 

详细状态码:
403:Forbidden	服务器理解请求客户端的请求,但是拒绝执行此请求
301:Moved Permanently	永久移动。请求的资源已被永久的移动到新URI,返回信息会包括新的URI,浏览器会自动定向到新URI。今后任何新的请求都应使用新的URI代替
302:Found	临时移动。与301类似。但资源只是临时被移动。客户端应继续使用原有URI
501:Not Implemented	服务器不支持请求的功能,无法完成请求
502:Bad Gateway	作为网关或者代理工作的服务器尝试执行请求时,从远程服务器接收到了一个无效的响应
503:Service Unavailable	由于超载或系统维护,服务器暂时的无法处理客户端的请求。延时的长度可包含在服务器的Retry-After头信息中

2.运行

打开终端,定位到脚本文件所属目录,输入命令 node 文件名 ,显示如下:“服务器启动成功了,可以通过 http://127.0.0.1:3000/ 来进行访问”

注: Node.js构建在Google Chrome的V8引擎之上,是一个独立的JavaScript运行时环境,可以脱离浏览器运行

四.响应内容类型Content-type

var http = require('http')
var server = http.createServer()
server.on('request',function(req,res){
    //在服务端默认发送的数据其实是utf-8编码的内容
    //但是浏览器不知道你是utf-8编码的内容,在浏览器不知道服务器响应内容的编码的情况下会按照当前操作系统的默认编码去解析
    //中文操作系统默认是gbk 
    //要让浏览器显示的数据不是乱码的,就需要告诉浏览器服务器发给它的内容是什么编码的,下面这行代码就可以解决这个问题
    var url = req.url
    if(url === '/plain'){
        // text/plain 就是普通文本  text/plain的意思是将文件设置为纯文本的形式,浏览器在获取到这种文件时并不会对其进行处理。
        res.setHeader('Content-Type','text/plain; charset=utf-8')
        res.end('hello 世界')
    }else if(url === '/html'){
        // text/html的意思是将文件的content-type设置为text/html的形式,浏览器在获取到这种文件时会自动调用html的解析器对文件进行相应的处理
        // 如果你发送的是 html 格式的字符串,则也要告诉浏览器我给你发送的是 text/html 格式的内容
        res.setHeader('Content-Type','text/html; charset=utf-8')
        res.end('<p>hello html <a href="">点我</a></p>')
    }
})
server.listen(3000,function(){
    console.log('Server is running.....,可以通过 http://127.0.0.1:3000/ 来进行访问')
})

五.通过http网络发送文件

  1. 发送的并不是文件,本质上发送的是文件的内容
  2. 当浏览器收到服务器响应内容之后,就会根据你的 Content-Type 进行对应的解析处理
  3. 服务器最好把每次响应的数据是什么内容类型都告诉客户端,而且要正确的告诉
  4. 不同资源对应的 Content-Type 是不一样的,具体参照:http://tool.oschina.net/commons
  5. 对于文本类型的数据,最好都加上编码,目的是为了防止中文解析乱码问题

六.ip地址和端口号

1.所有联网的程序都需要进行网络通信。一台计算机只有一个物理网卡,而且同一个局域网中,网卡的ip地址必须是唯一的(网卡是通过唯一的ip地址来进行定位的)。

2.DNS: 域名系统(英文:Domain Name System,缩写:DNS)是互联网的一项服务,是万维网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。

3.①ip地址用来定位计算机 ②端口号用来定位具体的应用程序(所有需要联网通信的应用程序都必须占用一个端口号)

4.端口号的范围从0~65536之间

5.在计算机中有一些默认端口号,最好不要去使用(例如http服务的80)

6.在开发过程中使用一些简单好记的就可以了,例如3000、5000等没什么含义

7.浏览器默认使用的端口号是80,若要请求其他端口号,则一定要在ip地址后面给出来

8.可以同时开启多个服务,但一定要确保不同服务占用的端口号不一致才可以。说白了,在一台计算机中,同一个端口号同一时间只能被一个程序占用

七.一些知识点补充

1.hhtp服务的响应内容(res.end())只能是二进制数据或者字符串(注意:数字、对象、数组、布尔值都是不可以的)

2.JSON.stringify() 方法将 JavaScript 对象或数组转换为字符串。JSON.parse() 方法将字符串数据转换为 JavaScript 对象或数组。

3.Node为JavaScript提供了很多服务器级别的API,这些API绝大多数都被包装到了一个具名的核心模块中。例如文件操作的fs核心模块,http服务构建的http模块,path路径操作模块、os操作系统信息模块。以后如果说一个模块是核心模块,就要想到如果要使用它,就必须require,例如:

var fs = require(‘fs’)
  var http = require(‘http’)

4.require 是一个方法,它的作用是用来加载模块的。在Node中,模块有两种:一是具名的核心模块,例如 fs、http;二是用户自己编写的文件模块(说白了就是js文件)。require加载用户自定义的模块时,require中的相对路径的 ./ 不能省略,否则会报错。补:后缀名也可以省略,require默认找的就是 .js 结尾的文件

5.在Node中,没有全局作用域,只有模块作用域(外部访问不到内部,内部也访问不到外部)

6.require 方法有两个作用:①加载文件模块并执行里面的代码②拿到被加载文件模块导出的接口对象(每个文件模块中都提供了一个对象—export,export默认是一个空对象,所有需要被外部访问的成员都需要挂载到exports这个对象中!)

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值