NodeJS入门

参考文献:https://www.tutorialspoint.com/nodejs/nodejs_quick_guide.htm

introduction

Node.js是一个基于V8引擎的服务端平台。简单来说

Node.js = Runtime Environment + JavaScript Library

Node.js应用程序由以下三个重要组件组成:

  • 导入所需模块
  • 创建服务器
  • 读取请求和响应请求

创建Node.js应用程序

step 1. 导入所需模块
我们使用require命令加载所需模块并返回模块实例到局部变量中,如下所示:

var http = require("http");				//导入Node.js Build-in模块
var square = require("./hello.js");		//导入自定义js文件,所有hello.js文件内容都会被执行。

附录:Node.js Build-in Modules and functions
参考:https://www.w3schools.com/nodejs/ref_modules.asp

Module Description
assert 提供一系列的断言测试功能
buffer 处理二进制数据
child_process 运行子进程
cluster 将当前进程克隆成多个同时运行的子进程
crypto OpenSSL加密函数
dgram 提供UDP数据报套接字的实现
dns 域名查询服务
events 处理事件
fs 文件系统模块
http 将Node.Js设为http服务器
https 将Node.js设为https服务器
path 处理文件路径
net 创建服务器和客户端
os 提供操作系统的信息
querystring 将请求参数字符串转为一个object对象
readline 将数据流中数据以行的形式读出
stream 处理数据流
string_decoder 将Buffer对象解码为字符串
timers 在指定时间后执行一个命令
tls 提供了实现传输层(TLS Transport Layer Security)和安全套接层(SSL Secure Socket Layer)的方法
url 实现url对象和字符串之间的转换
util 一些实用的函数
zlib 用于压缩和解压文件
vm 在虚拟机中编译JavaScript代码

step 2. 创建服务器
通过http.createServer()创建http服务器,然后通过listen将服务器绑定到8081端口。

var http = require('http');

http.createServer(function(request, response){
   
    response.writeHead(200, {
   'Content-Type': 'text/plain'});
    response.end('Hello World!\n');
}).listen(8081);

console.log('Server running at http://127.0.0.1:8081/');

step 3. 测试请求和响应
将第二步代码保存为main.js,然后进入该文件目录,运行node命令:

node main.js

验证输出为:

Server running at http://127.0.0.1:8081/

打开浏览器输入http://127.0.0.1:8081/
在这里插入图片描述

NPM

Node包管理器(Node Package Manager)主要有两个作用:

  • 在线查询node.js包的仓库(search.nodejs.org)
  • 提供安装node.js包的命令行工具,以及包的版本管理和依赖管理

npm随Node.js绑定安装。如果需要把npm升级到最新版本,通过如下命令进行:

npm install npm -g

其中-g表示global全局。
安装任何Node.js模块的命令如下:

npm install <Module Name>

比如安装大名鼎鼎的web框架模块express

npm install express

安装好后,express就会出现在工程目录下的node_modules目录中。
查看安装信息:

npm list

在这里插入图片描述
现在就可以通过require语句导入express模块:

var express = require('express');

卸载一个模块:

npm uninstall express

更新一个模块:

npm update express

回调的概念

回调函数是指当满足某种条件后用函数指针的形式调用函数。在Node.js中,所有API都支持回调的方式编写。当异步执行API函数时,不会等待API函数执行完,而是继续下个语句,当API函数执行完后再以回调的方式返回函数执行结果。比如fs模块下异步读取文件的API函数readFile的阻塞形式为readFileSync。
现创建一个名为input.txt的文本文件,内容如下:

Tutorials Point is giving self learning content
to teach the world in simple and easy way!!!!!
阻塞代码示例:

使用以下代码创建一个名为main.js的js文件

var fs = require('fs');
var data = fs.readFileSync('input.txt');

console.log(data.toString());
console.log("Program Ended");

运行结果:

Tutorials Point is giving self learning content
to teach the world in simple and easy way!!!!!
Program Ended
非阻塞代码示例:
var fs = require('fs');
fs.readFile('input.txt', function(err, data){
   
    if(err)
        return console.error(err);
    console.log(data.toString());
});
console.log("Program Ended");

运行结果:

Program Ended
Tutorials Point is giving self learning content
to teach the world in simple and easy way!!!!!

结论:阻塞程序按顺序执行,异步程序按回调的方式执行

在Node.js中,任何异步函数都接受回调函数作为最后一个参数,而回调函数接受错误作为第一个参数。

事件

事件和回调不同之处在于,回调函数是在异步函数执行完成之后执行的,事件是在事件触发之后执行的。事件采用观察者模式,事件监听函数充当Observer,观察者会不断循环检测事件是否被触发。

  1. 创建事件发射器
    var events = require('events');					//导入事件模块
    var eventEmitter = new events.EventEmitter();	//创建事件发射器
    
  2. 注册事件
    eventEmitter.on('eventName', eventHandler);
    
  3. 触发事件
    eventEmitter.emit('eventName');
    

举例:

var events = require('events');
var eventEmitter = new events.EventEmitter();

var connectHandler = function connected(){
   
    console.log('connnected successful.');
    eventEmitter.emit('data_received');
};

eventEmitter.on('connection', connectHandler);
eventEmitter.on('data_received', function(){
   
    console.log('data received successfully.');
});

eventEmitter.emit('connection');
console.log('Program Ended.');

注:

  1. 同一个事件可以添加多个监听器,事件触发后会执行所有监听器,执行顺序按照添加时的列表顺序执行。
    var events = require('events');
    var eventEmitter = new events.EventEmitter();
    
    var eventHandler1 = function(){
         
    	console.log('event 1');
    }
    var eventHandler2 = function(){
         
    	console.log('event 2');
    }
    var eventHandler3 = function(){
         
    	console.log('event 3');
    
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值