1:Node.js是一个JavaScript运行时环境,nodejs可以解析和执行JavaScript代码
2:在Node这个JavaScript执行环境中为JavaScript提高了一些服务器级别的操作API
1)文件读写
2)网络服务的构建
3)网络通信
4)http服务器等
3:Node.js的特性
1)event-driven事件驱动
2)non-blocking I/O model 非阻塞IO模型(异步)
3)lightweight and efficient 轻量和高效
4:npm是世界上最大的开源库生态系统
5:在node中采用EcmaScript进行编码,没有BOM和DOM
6:Node中的JavaScript具有文件操作能力
1)fs是 file-system 的简写,就是文件系统的意思
2)在Node中如果想要进行文件操作,就必须引入fs这个核心模块
3)在fs这个核心模块中,记忆提供了所有文件的操作相关的API
4)例如:fs.readFile 方法就是用来读取文件的,fs.writeFile就是用来写入文件的
5)运行方法,在cmd控制台进入到js文件所在的文件夹,使用(node 文件名
)的方法运行
(1)读取文件
//使用require方法加载fs核心模块
var fs = require('fs');
//读取文件
/* readFile接收两个参数
第一个参数是,文件的相对地址
第二个参数是一个回调函数,回调函数有两个参数(error,data),
读取成功后。data就是得到的数据,error就为空null;
反之读取失败,data数据就为空null,error就是报错的信息
*/
fs.readFile('文件的相对地址',function(error,data){
//文件中存储的都是二进制数据 0 1,在读取后,二进制会转为16进制
console.log(data);
//可以通过toString方法将其进行转化为正常的字符
console.log(data.toString());
})
(2)写入文件
//使用require方法加载fs核心模块
var fs = require('fs');
/*
wirltFile接收三个参数
第一个是要写入的参数是,文件的相对地址
第二个参数是要写入的数据
第三个参数是回调函数,回调函数值接收一个参数error(形参),error是失败所获得的失败信息
*/
fs.writeFile('文件的相对地址','需要写入的内容',function(error){
}
7:简单的http服务
1)接收请求,触发request请求事件,执行回调函数,需要接收两个参数:
Request(请求对象):用来获取客户端的请求信息,例如请求路径
Response(响应对象):给客户端发送请求信息
2)response 对象有一个方法:write ,可以用来给客户端发送响应数据,最后一定要使用end来结束响应,否则客户端会一直等待
3)request.url获取到的是端口号后面的那一部分请求路径
//使用require方法加载http核心模块
var http = require('http');
//使用http.createServer()方法创建一个web服务器
//返回一个Server实例
var server = http.createServer();
//接收请求,触发request请求事件,执行回调函数
/*
需要接收两个参数:
Request(请求对象):用来获取客户端的请求信息,例如请求路径
Response(响应对象):给客户端发送请求信息
*/
server.on('request',function(request,response){
//requset.url,就是请求的路径
console.log("接收到客户端请求,请求的路径是:"+request.url)
//response 对象有一个方法:write ,可以用来给客户端发送响应数据
//wiite可以对此使用,但是最后一定要使用end来结束响应,否则客户端会一直等待
response.write('hello nodejs')
//结束响应
response.end()
})
//绑定端口号,启动服务器
server.listen(3000,function(){
console.log("服务器启动成功,使用http://127.0.0.1:3000/来访问服务器")
})
根据不同的 request.url 返回不同的信息
var http = require('http')
//创建Server
var server = http.createServer();
//监听request请求事件,设置请求处理函数
server.on('request',function(request,response){
//根据不同的请求路径,发送不同的请求信息
//request.url获取到的是端口号后面的那一部分请求路径,也就是说下面所有的url都是以/开头
var url = request.url
if(url === '/'){
response.end("index page")
}else if(url === '/login'){
response.end('login page')
}else{
response.end('404 Not Fund')
}
/*
response.write('hello')
response.end()
上面两个合并简写为下面的方式
responer.end('hello')
*/
})
//绑定端口号
server.lister(3000,function(){
console.log("服务器启动成功,使用http://127.0.0.1:3000/来访问服务器")
})
8:node中的js
1:核心模块
1)Node为JavaScript提供了很多服务器级别的API,这些API绝大多数都被包装到了一个具名的核心模块中
(1)例如文件的操作fs
核心模块,http服务构建的http
模块,path
路径操作模块,os
操作系统信息模块等
(2)通过 var 模块名 = request('模块名')
来引入核心模块
9:简单的模块化
1)同时执行多个js文件
2)require是一个方法,作用就是用来加载模块的
3)在Node中,模块有三种
(1)具名的核心模块,例如fs、http等
(2)用户自己编写的文件模块
(3)第三方模块
4)require方法引入相对路径必须加 ./
,可以省略后缀名,
//a.js,b.js同级文件
//表示加载并执行b.js文件
//require('./b.js')
require('./b');
//b.js
console.log('b.js文件被加载执行');
5)在Node中没有全局作用域,只要模块作用域,默认都是封闭的,a.js中访问不到不到b.js文件中的成员,比如对象、方法等,如果需要访问,看下面6中的自定义模块化的导出使用
6)自定义模块化的导出使用
(1)require方法的两个作用
(1.1)加载文件模块
(1.2)拿到加载文件模块导出的接口对象,每个文件模块都提供一个对象 exports
默认是一个空对象,可以把所有需要被外部访问的成员都挂载到exports
这个对象中
//a.js,b.js在同一级目录下
var bExports = require('./b');
console.log(bExports.foo);
console.log(bExports.add(10,30));
console.log(bExports.age);
var foo = 'b的foo被访问成功'
exports.foo = 'hello'
exports.add = function(x,y){
return x+y
}
var age = 20;
exports.age = age;
10:ip地址和端口号
1)ip地址是计算机在互联网的唯一标识,ip地址用来定位计算机
2)端口号用来定位具体的应用程序,所有需要联网通信的软件都会占用一个端口号
3)端口号的范围从0-65536之间
11:服务端默认发送的数据是utf8编码的内容,
1)浏览器在不知道服务器响应内容的编码的情况下回按照当前操作系统的默认编码去解析
2)中文操作系统默认编码是gdk
12:Content-type类型
//获取核心模块
var http = require('http');
var fs = require('fs');
//使用http.createServer()方法创建一个web服务器
var server = http.createServer();
/*
接收请求,触发request请求事件,执行回调函数
回调函数里的两个参数:
request(请求对象):用来获取客户端的请求信息,例如请求路径
response(响应对象):给客户端发送请求信息
*/
server.on('request',function(request,response){
//获取客户端的路径
//request.url获取到的是端口号后面的那一部分请求路径,也就是说下面所有的url都是以/开头
var url = request.url;
//读取html文件
if(url === '/'){
//要读的文件的相对地址,回调函数的参数,data是指读取成功得到的文件的数据,err是指读取失败所得到的错误信息
fs.readerFirle('./resource/index.html',function(err,data){
if(err){
//Content-Type告知浏览器要发送的数据格式
response.setHeader('Content-Type','text/plain; charset=utf-8');
response.end('文件读取失败');
}else{
response.setHeader('Content-Type','text/html; charset=utf-8');
//data默认是二进制数据,可以通过 toString()转化为字符串格式
//response.end()支持两种数据格式,一种是二进制,一种是字符串
response.end(data);
}
})
}
//读取img图片
else if(url === '/img'){
fs.readerFirle('./resource/ab2.jpg',function(err,data){
if(err){
response.setHeader('Content-Type','text/plain; charset=utf-8');
response.end('文件读取失败');
}else{
//图片不需要指定编码,一般只为字符数据指定编码
response.setHeader('Content-Type','image/jpeg');
response.end(data);
}
})
}
})
server.listen(3000,function(){
console.log('服务器启动成功,使用http://127.0.0.1:3000/来访问服务器');
})
目录结构,需要发送的文件在12-http-fs.js同级文件夹内部,在cmd控制台进入12-http-fs.js文件所在地址通过 node 文件名启动服务器