入门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.js
和b.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.js
和b.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);