Node.js基础语法

什么是 Node.js?

node.js是一个可以让JavaScript可以运行在服务端的平台,是为了实时web开发应用的平台,可以作为服务器向用户提供服务。Node.js是用单线程,异步式I/O和事件驱动,依赖于Chrome的V8引擎进行代码解释的javascript运行环境,V8引擎执行Javascript的速度非常快,性能非常好。;
并且Node.js 不运行在浏览器中,所以也就不存在 JavaScript 的浏览器兼容性问题,你可以放心地使用 JavaScript 语言的所有特性。

1:**下载安装node以及node环境**:见之前博客有详细node安装以及
环境配置
2:在nodejs中文件修改需要重启服务:这要开发比较慢,
            安装自启动工具**supervisor**
            cnpm install –g supervisor 
           安装完成之后启动文件使用 supervisor 项目名称.js
3:nodejs  可以自动找node_modules文件下的文件  :
如果node_modules文件下有文件夹  可在cd进入这个文件  
使用命令npm init –yes  安装当前文件的package.json文件,
直接请求require(“名字”);
4:nodejs  第三方包的安装   和package.json 项目文件
创建 node项目之后先使用命令进入项目文件,
安装项目的配置文件package.json文件。
使用命令  npm init /cnpm init   
或者 npm init –yes/cnpm init –yes (这种表示严格模式命名)

创建node.js应用

node的HTTP模块(用来搭建http请求和客户端)
(在使用node.js创建应用时,如果不记得某个方法的参数,删掉左边的括号,然后再补上就会出现参数提示)
三步:
1:引入 required 模块:我们可以使用 require 指令来载入 Node.js 模块

   var http = require("http");

2:创建服务器:服务器可以监听客户端的请求,类似于 Apache 、Nginx 等 HTTP 服务器。

http.createServer(function (request, response) {
}).listen(端口号);

3:接收请求与响应请求 服务器很容易创建,客户端可以使用浏览器或终端发送 HTTP 请求,服务器接收请求后返回响应数据。

基本样式:

var http=require('http');//引入
http.createServer(function (req,res){//创建服务器
    res.writeHead(200,{"Content-Type":"text/html;charset=UTF-8"}); 
    // 设置http头部  状态  文件类型  字符集
    (如果不设置charset=UTF-8,网页就会出现乱码)
    res.write("我是node js");    //发送响应数据
    res.end(); //请求完成之后结束响应
}).listen(8100);//设置监听端口号
console.log("http://192.168.0.253:8100");

写完之后在终端输入

node server.js    启动服务器·

启动成功之后,在终端就会出现:http://192.168.0.253:8100,然后打开浏览器,输入http://192.168.0.253:8100,就会出现我是node js

解析服务器路径使用URL模块

url 模块
首先,我们需要先引入url 模块

   var url=require('url');

然后使用方法:

 url.parse()

解析url地址。
案例:
path.query//可以得到路径上面的值

var http=require('http');
 var url=require('url');
 if (req.url != "/favicon.ico") {
http.createServer(function (req,res){
 let path = url.parse(req.url, true);
 // url.parse()参数1位解析的路径   参数2:可以将地址上的值解析出来
 let query = path.query;
    res.writeHead(200,{"Content-Type":"text/html;charset=UTF-8"}); 
     res.write("解析路径传值:" + JSON.stringify(query));
     //将路径上面的值传到页面上面,因为query是一个对象,
     要传到页面上面,需要转成字符串
    res.end(); 
    }
}).listen(8100);
console.log("http://192.168.0.253:8100");

Commonjs

Commonjs规范的提出,弥补javascript没有标准的缺陷,提供一个类似后端语言的标准库,也就是说commonjs是模块化的标准,nodejs就是commonjs模块化的实现
在nodejs中将公共的功能抽离为单独的js文件作为模块,在外部是没有办法访问的(类似后端的私有的属性和方法);要想使用模块,就必须在模块里面通过exports或者module.exports暴露属性或者方法。在需要的模块使用require引入模块
Node.js 提供了 exports 和 require 两个对象,其中 exports 是模块公开的接口,require 用于从外部获取一个模块的接口,即所获取模块的 exports 对象。

在这里插入图片描述
案例:

//hello.js 
function Hello() { 
    var name; 
    this.setName = function(thyName) { 
        name = thyName; 
    }; 
    this.sayHello = function() { 
        console.log('Hello ' + name); 
    }; 
}; 
module.exports = Hello;//使用exports暴露
//main.js 
var Hello = require('./hello'); //然后使用require获取模块接口
hello = new Hello(); 
hello.setName('BYVoid'); 
hello.sayHello(); 

nodejs 中的fs模块文件系统的使用

Node.js内置的fs模块就是文件系统模块,负责读写文件。
Node 导入文件系统模块(fs)语法如下所示:

var fs = require("fs")

Node.js 文件系统(fs 模块)模块中的方法均有异步和同步版本,例如读取文件内容的函数有异步的 fs.readFile() 和同步的 fs.readFileSync()。
异步的方法函数最后一个参数为回调函数,回调函数的第一个参数包含了错误信息(error)。
打开文件
在异步模式下打开文件的语法格式:

fs.open(path, flags[, mode], callback)

参数

参数使用说明如下:
path - 文件的路径。
flags - 文件打开的行为。
mode - 设置文件模式(权限),文件创建默认权限为 0666(可读,可写)。
callback - 回调函数,带有两个参数如:callback(err, fd)。

案例:

var fs = require("fs");
// 异步打开文件
console.log("准备打开文件!");
fs.open('input.txt', 'r+', function(err, fd) {
   if (err) {
       return console.error(err);
   }
  console.log("文件打开成功!");     
});

以上代码执行结果如下:

$ node file.js 
准备打开文件!
文件打开成功!

获取文件信息
通过异步模式获取文件信息的语法格式:

fs.stat(path, callback)

参数

path - 文件路径。
callback - 回调函数,带有两个参数如:(err, stats), stats 是 fs.Stats 对象。

写入文件
异步模式下写入文件的语法格式:

fs.writeFile(file, data[, options], callback)

writeFile 直接打开文件默认是 w 模式,所以如果文件存在,该方法写入的内容会覆盖旧的文件内容。
参数使用说明如下:

file - 文件名或文件描述符。
data - 要写入文件的数据,可以是 String(字符串) 或 Buffer(缓冲) 对象。
options - 该参数是一个对象,包含 {encoding, mode, flag}。默认编码为 utf8, 模式为 0666 , flag 为 'w'
callback - 回调函数,回调函数只包含错误信息参数(err),在写入失败时返回。

读取文件
以下为异步模式下读取文件的语法格式:

fs.read(fd, buffer, offset, length, position, callback)

该方法使用了文件描述符来读取文件。
参数使用说明如下:

fd - 通过 fs.open() 方法返回的文件描述符。
buffer - 数据写入的缓冲区。
offset - 缓冲区写入的写入偏移量。
length - 要从文件中读取的字节数。
position - 文件读取的起始位置,如果 position 的值为 null,则会从当前文件指针的位置读取。
callback - 回调函数,有三个参数err, bytesRead, buffer,err 为错误信息, bytesRead 表示读取的字节数,buffer 为缓冲区对象。

关闭文件
异步模式下关闭文件的语法格式:

fs.close(fd, callback)

该方法使用了文件描述符来读取文件。
参数使用说明如下:

fd - 通过 fs.open() 方法返回的文件描述符。
callback - 回调函数,没有参数。

截取文件
以下为异步模式下截取文件的语法格式:

fs.ftruncate(fd, len, callback)

该方法使用了文件描述符来读取文件。
参数:

fd - 通过 fs.open() 方法返回的文件描述符。
len - 文件内容截取的长度。
callback - 回调函数,没有参数。

删除文件
删除文件的语法格式:

fs.unlink(path, callback)

参数

path - 文件路径。
callback - 回调函数,没有参数

创建目录
以下为创建目录的语法格式:

fs.mkdir(path[, options], callback)

参数

path - 文件路径。
options 参数可以是:
recursive - 是否以递归的方式创建目录,默认为 false。
mode - 设置目录权限,默认为 0777。
callback - 回调函数,没有参数。

读取目录
读取目录的语法格式:

fs.readdir(path, callback)

参数

path - 文件路径。
callback - 回调函数,回调函数带有两个参数err, files,err 为错误信息,files 为 目录下的文件数组列表。

删除目录
删除目录的语法格式:

fs.rmdir(path, callback)

参数:

path - 文件路径。
callback - 回调函数,没有参数。

Node.js Buffer(缓冲区)

JavaScript 语言自身只有字符串数据类型,没有二进制数据类型。
但在处理像TCP流或文件流时,必须使用到二进制数据。因此在 Node.js中,定义了一个 Buffer 类,该类用来创建一个专门存放二进制数据的缓存区。
在 Node.js 中,Buffer 类是随 Node 内核一起发布的核心库。Buffer 库为 Node.js 带来了一种存储原始数据的方法,可以让 Node.js 处理二进制数据,每当需要在 Node.js 中处理I/O操作中移动的数据时,就有可能使用 Buffer 库。原始数据存储在 Buffer 类的实例中。一个 Buffer 类似于一个整数数组,但它对应于 V8 堆内存之外的一块原始内存
Buffer 与字符编码
Buffer 实例一般用于表示编码字符的序列,比如 UTF-8 、 UCS2 、 Base64 、或十六进制编码的数据。 通过使用显式的字符编码,就可以在 Buffer 实例与普通的 JavaScript 字符串之间进行相互转换。

const buf = Buffer.from('runoob', 'ascii');
// 输出 72756e6f6f62
console.log(buf.toString('hex'));
// 输出 cnVub29i
console.log(buf.toString('base64'));

创建 Buffer 类
Buffer 提供了以下 API 来创建 Buffer 类:

Buffer.alloc(size[, fill[, encoding]]): 返回一个指定大小的 Buffer 实例,如果没有设置 fill,则默认填满 0
Buffer.allocUnsafe(size): 返回一个指定大小的 Buffer 实例,但是它不会被初始化,所以它可能包含敏感的数据
Buffer.allocUnsafeSlow(size)
Buffer.from(array): 返回一个被 array 的值初始化的新的 Buffer 实例(传入的 array 的元素只能是数字,不然就会自动被 0 覆盖)
Buffer.from(arrayBuffer[, byteOffset[, length]]): 返回一个新建的与给定的 ArrayBuffer 共享同一内存的 Buffer。
Buffer.from(buffer): 复制传入的 Buffer 实例的数据,并返回一个新的 Buffer 实例
Buffer.from(string[, encoding]): 返回一个被 string 的值初始化的新的 Buffer 实例

写入缓冲区

写入 Node 缓冲区的语法如下所示:

buf.write(string[, offset[, length]][, encoding])

参数:

string - 写入缓冲区的字符串。
offset - 缓冲区开始写入的索引值,默认为 0 。
length - 写入的字节数,默认为 buffer.length
encoding - 使用的编码。默认为 'utf8' 。

从缓冲区读取数据
读取 Node 缓冲区数据的语法如下所示:
buf.toString([encoding[, start[, end]]])
参数

encoding - 使用的编码。默认为 'utf8' 。
start - 指定开始读取的索引位置,默认为 0。
end - 结束位置,默认为缓冲区的末尾。

将 Buffer 转换为 JSON 对象
语法
将 Node Buffer 转换为 JSON 对象的函数语法格式如下:

buf.toJSON()

当字符串化一个 Buffer 实例时,JSON.stringify() 会隐式地调用该 toJSON()。
缓冲区合并
Node 缓冲区合并的语法如下所示:

Buffer.concat(list[, totalLength])

参数

list - 用于合并的 Buffer 对象数组列表。
totalLength - 指定合并后Buffer对象的总长度。

缓冲区比较
Node Buffer 比较的函数语法如下所示, 该方法在 Node.js v0.12.2 版本引入:

buf.compare(otherBuffer);

参数
参数描述如下:

otherBuffer - 与 buf 对象比较的另外一个 Buffer 对象。

拷贝缓冲区
Node 缓冲区拷贝语法如下所示:

buf.copy(targetBuffer[, targetStart[, sourceStart[, sourceEnd]]])

参数

targetBuffer - 要拷贝的 Buffer 对象。
targetStart - 数字, 可选, 默认: 0
sourceStart - 数字, 可选, 默认: 0
sourceEnd - 数字, 可选, 默认: buffer.length

缓冲区裁剪
Node 缓冲区裁剪语法如下所示:

buf加粗样式.slice([start[, end]])

参数

start - 数字, 可选, 默认: 0
end - 数字, 可选, 默认: buffer.length

缓冲区长度
Node 缓冲区长度计算语法如下所示:

buf.length;
发布了35 篇原创文章 · 获赞 5 · 访问量 817

猜你喜欢

转载自blog.csdn.net/weixin_43332220/article/details/103206364
今日推荐