入门Node.js

1.概念

Node.js是什么
1、以前只有浏览器可以解析执行JavaScript代码,Node.js作者把Google中V8引擎移植出来开发的一个独立JavaScript运行环境,node.js就是一个运行JavaScript运行时的环境
2、在node.js这个环境下,给JavaScript提供了一些服务器级别的操作API
3、Node.js是事件驱动、非阻塞IO模型(异步)的
4、JavaScript相关的包都存放在npm上,使用时可以随时使用命令进行下载 例如下载jquery则使用命令 npm install jquery
Node.js能做什么
1、Web服务器后台、命令行工具
2.学习网站
Nodejs中文社区 https://cnodejs.org/
新手入门 https://www.nodebeginner.org/
3.安装完后输入 node --version或者 node -v确认版本

2.基础知识

2.1输出helloworld

在路径:D:\Project\Node.js\1 下新建文件helloworld.js 编写代码:

var foo = 'helloworld';
console.log(foo);

打开控制台 win + r 输入 cmd 按照图示进入文件路径执行命令 在这里插入图片描述

node helloworld.js

2.2读取文件

当前路径D:\Project\Node.js\1下新建文件a.txt里面放入内容我爱你
新建js文件read.js写入代码

//加载核心模块fs file-system
var fs = require('fs');

//读取文件
fs.readFile('a.txt', function(error, data){
	console.log(data);
	console.log(data.toString());
})

执行命令node read.js
在这里插入图片描述
总结:readFile接口第一个参数路径读取成功则执行回调函数,data为读取的数据为二进制数据

2.3写文件

当前路径D:\Project\Node.js\1新建js文件write.js编写代码

//加载核心模块fs file-system
var fs = require('fs');

//1.文件路径 2.文件内容 3.回调函数
fs.writeFile('b.txt', '你爱我', function(error){
	
})

执行命令 node write.js
结果:
1.当前路径下会新建一个b.txt文件,打开文件,里面会有我们写入的内容“你爱我”
2.当我们修改接口writeFile参数 b.txt 为 a.txt 执行命令后会将a.txt里面内容删除 然后写入内容"你爱我"

2.4 http服务

当前路径D:\Project\Node.js\1新建js文件http.js编写代码

 //加载http模块
var http = require('http');

//创建一个Web服务器
var server = http.createServer();

//注册request事件
server.on('request', function(){
	console.log('服务器成功收到请求事件');
})

//绑定端口号
server.listen(3000,function(){
	console.log('启动成功 端口号 3000');
})

执行命令 node http.js

在这里插入图片描述
服务器启动成功
使用浏览器访问 127.0.0.1:3000
在这里插入图片描述
查看服务器:
在这里插入图片描述
其实很好理解,按照字面意思写代码,饿了就要吃饭的逻辑,
1.首先客户端要访问服务器,就要有一个服务器

var server = http.createServer();

2.有了服务器就要启动它 在3000端口启动

server.listen(3000,function(){console.log('启动成功 端口号 3000');})

3.服务器创建好了并且启动了 那么客户端访问的时候 服务器需要用一个东西去接收访问 就像存钱需要存取款机才能把钱存进去 那么存取款机就是 on注册的事件

server.on('request', function(){
	console.log('服务器成功收到请求事件');
})

事件函数回调函数参数request:

//注册request事件
server.on('request', function(request, response){
	console.log('服务器成功收到请求事件');
	console.log('参数request = ' + request.url);
})

启动服务器 node http.js
浏览器输入http://127.0.0.1:3000/aaaaaa
参数request.url为地址端口号的访问路径
在这里插入图片描述
事件函数回调函数参数response给客户端发送内容

//注册request事件
server.on('request', function(request, response){
	console.log('服务器成功收到请求事件');
	console.log('参数request = ' + request.url);
	
	response.write('woyeaini');
	response.end();
})

启动服务器、访问服务器、客户端收到了服务器发过来的woyeaini
在这里插入图片描述
其中response.end();表示服务器往客户端发送内容停止写入并发送过去 如果不使用这句则会一直等待

3模块系统

3.1核心模块

Node为js提供了很多服务器级别API,这些API大多包装到核心模块中了,例如上面已经使用的文件操作fs模块,http服务构建的http模块,os操作系统信息模块

//加载不同模块
var fs = require('fs');	
var http = require('http');
var os = require('os');

3.2自定义模块

简单的模块化例子
D:\Project\Node.js\2路径下新建a.jsb.js文件
分别编写js代码

//a.js文件内容
console.log('a.js被执行了');
require('./b.js');
//b.js文件内容
console.log('b.js被执行了');

切换到路径D:\Project\Node.js\2执行命令结果如下
在这里插入图片描述
以上例子说明每一个js文件都是一个模块,执行不同的js可以使用require加载模块,require另一个作用是返回加载模块导出的对象,举例子
修改a.jsb.js代码

//a.js文件内容
var ret = require('./b.js');
console.log(ret);
//b.js文件内容
var foo = 'bbbbb';
exports.foo = 'hello';

执行命令可以看到结果
在这里插入图片描述
每个文件都提供一个对象exports,可以将模块中的变量,函数挂载上去,使用require加载的时候,就会返回该文件的对象exports;
将函数add挂在对象上为

exports.add = function(x,y){
	return x + y;
}

3.3通过URL访问服务器上的文件及内容

1.在文件夹resources下新建三个文件,文件名1.txt、DLRB.jpg、login.html内容为
在这里插入图片描述
2.服务器代码如下

//加载模块
var http = require('http');
var fs = require('fs');

//创建一个Web服务器
var server = http.createServer();

var wwwDir = 'D:/Project/Node.js/resources'
//注册request事件
server.on('request', function(req, res){
	var url = req.url;
	
	//实现根据输入不同访问路径 访问不同文件
	var filePath = url;
	
	fs.readFile(wwwDir + filePath, function(err, data){
		if(err)
		{
			return res.end('404 Not Fount');
		}
		res.end(data);
	});
})


//绑定端口号
server.listen(3000,function(){
	console.log('启动成功 端口号 3000');
})

3.浏览器访问不同路径则获取不同的内容
//访问照片

http://127.0.0.1:3000/DLRB.jpg

在这里插入图片描述
//访问html文件

http://127.0.0.1:3000/login.html

在这里插入图片描述

3.4获取文件夹下的文件目录

文件夹resources下有四个文件
在这里插入图片描述
js代码

var fs = require('fs');

fs.readdir('D:/Project/Node.js/resources', function(err, files){
	if(err)
	{
		return console.log('目录不存在');
	}
	console.log(files);
})

在这里插入图片描

3.5替换文件内容

将文件夹直接拉到浏览器得到目录结构
在这里插入图片描述
右键网页 选择查看网页源代码 将所有代码copy到template.html文件
当我们使用3.3的服务器代码然后在浏览器输入地址查看文件内容
在这里插入图片描述

//加载模块
var http = require('http');
var fs = require('fs');

//创建一个Web服务器
var server = http.createServer();

var wwwDir = 'D:/Project/Node.js/resources'
//注册request事件
server.on('request', function(req, res){
	var url = req.url;
	
	//实现根据输入不同访问路径 访问不同文件
	var filePath = url;
	
	fs.readFile(wwwDir + filePath, function(err, data){
		if(err)
		{
			return res.end('404 Not Fount');
		}
		data = data.toString();
		data = data.replace('DLRB.jpg', '迪丽热巴.jpg');
		res.end(data);
	});
})


//绑定端口号
server.listen(3000,function(){
	console.log('启动成功 端口号 3000');
})

启动服务器 使用浏览器访问的时候就可以看到 文件名被替换了
在这里插入图片描述

4模板引擎

4.1使用art-template模板替换字符串

新建代码文件template.js

var template = require('art-template');

var tplStr = '<h1>{{ LOGIN }}</h1> <h1> {{NAME}} </h1>';

// 将模板源代码编译成函数并立刻执行 模板字符串/替换对象/位置
var ret = template.render(tplStr, {
	LOGIN: '登录',
	NAME: '姓名',
	});

console.log(ret);

执行命令可以看到字符串进行了替换
在这里插入图片描述

5回调函数

5.1函数作为函数参数

新建js文件callback.js编写代码如下

//函数当参数
function funB(fun)
{
	return 2 + fun;
}

function funA()
{
	return 1;
}

console.log(funB(funA()));

运行结果
在这里插入图片描述

5.2异步执行

var nNumber = 0;

function funA(x)
{
	console.log(x);
}

function funB(nTime)
{
	//setTimeout第一个参数执行的函数, 第二个参数定时的时间ms
	setTimeout(function(){
		nNumber = 1;
	},nTime);
}

console.log(nNumber);
funB(3000);
funA(nNumber);

在这里插入图片描述

node.js异步执行,并不需要等待funB函数执行结束就执行了函数funA输出nNumber = 0;

5.3回调函数

如5.2由于异步执行我们无法在funB定时函数结束前输出nNumber修改后的值,则需要我们添加回调函数,在3秒结束后执行回调函数输出nNumber修改后的值

var nNumber = 0;

function funA(x)
{
	console.log(x);
}

function funB(nTime, callback)
{
	//setTimeout第一个参数执行的函数, 第二个参数定时的时间ms
	setTimeout(function(){
		nNumber = 1;
		callback(nNumber);
	},nTime);
}

console.log(nNumber);
funB(3000, funA);

在这里插入图片描述

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值