Node.js简介及示例

什么是Nodejs

Node.js(中文网链接 官网链接)是一个基于 Chrome V8 引擎的 JavaScript 运行环境。可以使javascript在服务器环境中运行。

怎么使用

在你官网下载Node.js安装程序,进行安装,在 cmd环境 中输入node命令,即可进入node环境,可以输入javascript代码运行。
在这里插入图片描述
从上面可以看到node的版本号,由此说明进入node环境,接下来输入代码试一下
在这里插入图片描述
由此看出,js代码可以再ndoe环境中运行,那么仅仅在cmd中运行是不够的,那么我们可以创建一个js文件,在node中运行改文件
在这里插入图片描述
由此可见,也可以运行文件,大家也可以在vscode的终端中运行,此处不再演示。以上只是node环境的搭建接下来,主要讲解相关模块,node也依赖这些模块进行工作。

通过 node.js 编写 http 服务程序

首先介绍一下http模块,http模块主要是用来搭建服务器的,可以接收请求,并做出响应,一下为具体示例。
步骤

  1. 加载 http 模块
  2. 创建 http 服务
  3. 监听用户的请求事件(request事件)
  4. 启动服务
// 加载 http 模块
var http = require('http');
// 创建 http 服务
var server = http.createServer();
// 监听用户请求事件
// request 对象包含了用户请求报文中的所有内容,通过 request 对象可以获取所有用户提交过来的数据
// response 对象用来向用户响应一些数据,当服务器要向客户端响应数据的时候必须使用 response 对象
server.on('request',function(request,response){
	// 解决乱码的思路,服务器通过设置http 响应报文头,告诉浏览器使用相应的编码来解析网页
	response.setHeader('Content-type','text/html; charset=utf-8');
	response.write('hello world');
	// 对于每一个请求,服务器必须结束响应,否则客户端(浏览器)会一直等待服务器响应结束
	response.end();
}); 
// 启动服务
server.listen(8080,function(){
	console.log('服务器启动了,请访问http://localhost:8080');
});

根据不同请求响应不同内容

以下只是简单的get请求,如果是带参数的请求需要用到其他模块。

// 加载 http 模块
var http = require('http');
// 创建 http 服务
http.createServer(function(request,response){
	response.setHeader('Content-type','text/html; charset=utf-8');
	response.write('hello world');
	// 通过 request.url 获取用户请求路径,根据不同路径服务器做出不同响应
	if(request.url === '/' || request.url === '/index'){
		response.end(' hello index');
	}else if(request.url === '/login'){
		response.end(' hello login');
	}else if(request.url === '/list'){
		response.end(' hello list');
	}else{
		response.end(' 404,Not Found 客户端错误!');
	}
}).listen(8080,function(){
	console.log('服务器启动了,请访问http://localhost:8080');
});

当我们请求localhost:8080时输出如下内容
在这里插入图片描述

根据不同请求做出不同响应(响应现有的 HTML 文件)

接下来介绍path模块,path模块主要对路径进行处理,fs模块主要对文件进行读写操作。

// 加载 http 模块
var http = require('http');
// 加载 fs 模块
var fs = require('fs');
// 加载 path 模块
var path = require('path');
// 创建 http 服务
http.createServer(function(request,response){
  response.setHeader('Content-type', 'text/html; charset=utf-8');
	response.write('hello world');
	// 通过 request.url 获取用户请求路径,根据不同路径服务器做出不同响应
	if(request.url === '/' || request.url === '/index'){
		fs.readFile(path.join(__dirname,'htmls','index.html'),function(err,data){
			if(err){
				throw(err);
			}
			response.end(data);
		});
	}else if(request.url === '/login'){
		fs.readFile(path.join(__dirname,'htmls','login.html'),function(err,data){
			if(err){
				throw(err);
			}
			response.end(data);
		});
	}else if(request.url === '/list'){
		fs.readFile(path.join(__dirname,'htmls','list.html'),function(err,data){
			if(err){
				throw(err);
			}
			response.end(data);
		});
	}else{
		fs.readFile(path.join(__dirname,'htmls','404.html'),function(err,data){
			if(err){
				throw(err);
			}
			response.end(data);
		});
	}
}).listen(8080,function(){
	console.log('服务器启动了,请访问http://localhost:8080');
});

当我们在地址栏中输入http://localhost:8080时输出以下内容,此时输出的是index.html的内容,我们通过fs模块读取文件内容再通过响应返回,因此在页面上展示出来,如果我们不加请求头那么输出的内容将是纯字符串,浏览器不会对其进行html解析
在这里插入图片描述

在地址栏中的请求URL就是一个标识,我们可以根据标识来判断服务器需要采取的响应。

接下来,我们了解一下node.js中的模块分类

模块分类

核心模块Core、Module、内置模块、原生模块

所有内置模块在安装 node.js 的时候就已经编译成二进制文件,可以直接加载运行部分内置模块,在 node.exe 这个程序启动的时候就已经默认加载了,所以可以直接使用,之前我们使用的就是内置模块。

内置模块

  • fs
  • http
  • path
  • url
  • ……

按文件后缀来分

如果加载时没有指定后缀名,那么按照如下顺序依次加载相应模块

  1. js
  2. .json
  3. .node(C++编写的模块)
  4. ……

自定义模块(第三方模块)

  • mime
  • cheerio
  • moment
  • mongo
  • ……

require 模块查找规则

情况一,如果require()的参数是一个路径
如果有js槲坠直接找这个文件如果没有后缀,先查找后缀为js的文件,如果没有再找后缀为json的文件,如果没有再后缀为node的文件,如果没有认为传入的是模块名,再找是否有传入的文件夹,如果有再按照js文件、json、node的顺序找文件
情况二,require() 的参数不是一个路径,直接是一个模块名称,先检测模块是否是核心模块,如果是直接加载该模块;如果不是,当做第三方模块加载,先在当前js文件所在目录下查找 node_modules 文件夹,如果有进入此文件夹查找模块;如果没有会去父目录中是否有 node_modules 如果没有会一层一层的向上找直到根目录为止。

require 加载模块注意点

  1. 所有模块加载第一次后,都会有缓存,二次加载直接读取缓存
  2. 每次加载模块时会优先从缓存中加载
  3. 核心模块在 Node.js 源码编译的时候,都已编译为二进制执行文件,所以加载速度较快
  4. 核心模块都保存在 lib 目录下
  5. 试图加载一个和核心模块同名的自定义模块是不会成功的
  • 自定义模块要么不要与核心模块同名
  • 要么使用路径的方式加载
  1. 核心模块只能通过模块名来加载
  2. require()加载模块使用 ./相对路径时,相对路径是相对当前模块,不受执行 node 命令的路径影响
  3. 建议加载文件模块的时候事中添加文件后缀名,不要省略

commonjs规范

  1. commonjs 规范
  2. 模块的定义
  3. commonjs 是为 JavaScript 语言制定的一种 模块规范、编程 API 规范
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

前端御书房

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值