nodejs 学习笔记

nodejs 中文文档 global 全局变量

nodejs 自动为每个文件添加了构造函数,所有的代码被构造函数所包含
(function(exports,require,module,__filename,__dirname){
//程序员的代码
})

exports 指代 module.exports
require():用于引入一个模块,同一级目录写路径 ./ 返回一个对象
module:模块 指代当前所在的模块
module.exports:当前模块的导出对象,公开的属性和方法
__filename:当前模块的绝对目录和模块名称
__dirname:当前模块的绝对目录

模块引入

			以路径开头	例如01-1					不以路径开头

1.文件模块 require(’./circle.js’); require(‘url’);
常用语引入自定义的模块 常用于引入官方提供的核心模块

2.目录模块 require(’…/自定义模块’); require(‘04-2’);
到目录下寻找package.json 会自动到当前目录下的node_modules中寻找目录
文件中main属性对应的文件名称 如果找不到往上一级查找顶级目录,常用语引入第三方模块
如果招不到引入index.js

npm官网

包和npm

CommonJS 是一中规范,JS向服务器端发展就遵循了此规范
包(package)就是一个目录模块
npm:用于管理包的工具
npm install 包名称 回车
自定安装到所在目录下的node_modules目录
npm init -y 初始化一个package.json文件,用于记录安装的包相关信息
npm install 回车 自动安装package.json中记录的包名称以及版本号

核心模块

querystring 模块 querystring.js

查询字符串:浏览器向服务器发请求,传递数据的一种方式
parse 将查询字符串解析为对象
stringify 将对象格式化为查询字符串

url 模块

parse 将URL解析为对象
format() 格式化对象为URL query为一个对象

全局函数 day03

1)一次性定时器
var timer = setTimeout(回调函数,间隔时间);
当间隔时间到了,执行一次回调函数
清除 clearTimeout(timer)
2)周期性定时器
var timer = setInterval(回调函数,间隔时间);
当间隔时间到了,执行一次回调函数
清除 clearInterval(timer)
3)立即执行定时器(在事件队列开头执行)
setImmediate(回调函数);
清除 clearImmediate(timer);
4)立即执行 (在主程序后边执行)
process.nextTick(回调函数)

fs模块(文件操作) 文件包含文件和目录,统称为文件

1)查看文件状态
fs.stat(path,callback) 回调函数,获取结果 / statSync(path)通过返回值获取结果
2)创建目录
fs.mkdir(path,callback) / mkdirSync(path)
3)移除目录
fs.rmdir(path,callback) / rmdirSync(path)
4)读取目录
fs.readdir(path,callback) / readdirSync(path)
5)创建文件/写入文件
fs.writeFile(path,data,callback) / writeFileSync(0path,data)
6)追加写入
fs.appendFile(path,data,callback) / appendFileSync(path,data)
7)读取文件的数据
fs.readFile(path,callback) / readFileSync(path)
8)删除文件
fs.unlink(path,callback) / unlinkSync(path)
9)判断文件是否存在
fs.existsSync(文件/目录);
10)文件流
fs.createReadStream(文件路径) 创建可读流
readStream.setEncoding(‘utf-8’); 设置编码为utf-8
readStream.on(‘data’,function(chunk){ 事件:监听是否有数据流
console.log(chunk);
});
// 监听是否结束
readStream.on(‘end’,function(){
console.log(‘读取结束’);
})

pipe 管道 读取的流通过管道放入到写入流

http 协议 浏览器和web服务器之间的通信协议

1)通用头信息

Request URL: 请求浏览器的URL,对应浏览器地址栏,向服务器获取哪些内容
Request Method: 请求的方法,获取内容的方式GET/POST
Status Code: 响应的状态码
1**:正在响应,还没有结束
2**:成功的响应
3**:响应的重定向,跳转到另一个URL
4**:客户端请求错误
5**:服务器端错误
Remote Address: 请求的服务器的IP地址 端口

2)响应头信息

Connection: 连接方式,keep-alive 持续连接
Content-Encoding: gzip 内容压缩形式
Content-Type: application/javascript 文件响应类型
Location: 跳转的URL,常配合着状态码3**使用

3)请求头信息

Accept: 浏览器接收的文件类型有哪些
Accept-Encoding: 接收的内容压缩形式
User-Agent: 客户端使用的浏览器版本

4)请求体

浏览器向服务器请求传递的数据 可有可无

HTTP 模块

1)模拟浏览器向web服务器发请求 http_01.js

http.get(url,callback) 发送请求
res.statusCode 获取响应的状态码
res.on(‘data’,function(chunk){} 事件:监听是否有数据流

2)单独创建web服务器 http_02.js

 app.listen(8088);		 //设置监听的端口
 app.on('request',(req,res)=>{}) on事件,一旦有请求,自动触发事件 回调函数:服务器作出响应
 // req:请求对象,获取所有请求
 //请求的URL,请求的方法
 console.log(req.url,req.method);
 // 请求头信息
 console.log(req.headers);
 
 // res:响应对象,作出具体响应
 //设置响应的内容
 res.write('this is home');
 
 //设置响应的头信息和状态码
 res.writeHead(302,{location:"http://www.baidu.com"}); //跳转
 
 //结束并发送响应内容到浏览器
 res.end();
 
 //使用文件压缩
 var gzip = zlib.createGzip();
 // 创建可读读取 通过到管道 发送到压缩   压缩再通过管道发送给响应
 fs.createReadStream('05.html').pipe(gzip).pipe(res);

express

基于nodejs平台 快速,开发,极简的web框架

Express 中文网

 var express = require('express');
 // 创建web服务器
 var app =express();
 //监听端口8088
 app.listen(8088);

使用路由来接收请求并作出响应

 //请求方法:get  请求url
 app.get('/login',(req,res)=>{
 	//回调函数,用于作出响应
 	//req:请求的对象
 	//res:响应的对象
 	res.send('这是登录的页面');  //res.send 设置并发送响应内容,只能发送一次
 })
 
 res.sendFile(__dirname + '/01.html');  响应文件  绝对路径
 
 req.query 获取查询字符串的数据 返回对象
 
 //路由传递参数
 app.get('/shopping/:price',(req,res)=>{
 	//获取路由传递的数据
 	console.log(req.params); 
 	res.send('这是购物车')
 });
 req.params 获取路由传递的数据 返回对象

get-post express_02.js

res 响应的对象
send()设置并发送响应的内容,路由中只能使用一次
sendFile() 响应文件,要求使用绝对路径 __dirname
redirect() 响应的重定向,跳转到另一个url

req 请求的对象
method 请求的方法
url 请求的url
headers 请求的头部信息
query 获取请求的查询字符串形式额数据,格式为对象
params 获取路由传递的数据

app.get('/myreg',(req,res)=>{
	console.log(req.query);
	res.send('注册成功');
})

// 根据表单提交按钮的请求,重新设置一个路由
app.post('/mylogin',(req,res)=>{
	//获取post请求数据
	req.on('data',(result)=>{
		console.log(querystring.parse(result.toString()));
	})
	res.send('请求成功');
})

路由器

路由在使用过程中,不同模块下的路由可能出现相同的url:同一个模块下的路由放到特定的路由器

1)创建路由器

//路由起是express下的一个功能
const express = require(‘express’);
// 创建路由器
var router = express.Router();
//路由器添加路由
router.get(’/list’,(req,res)=>{
res.send(‘这是用户列表’);
})
//路由器最终要交给web服务器使用,导出路由器对象
module.exports=router;

2)向web 服务器中使用

const userRouter = require('./user.js');
//使用路由器,把用户下的所有路由挂载到/user下
//挂载:在url的前面添加/user
/**
 * 参数1:挂载的url
 * 参数2:挂载的路由器
 */
app.use('/user',userRouter);

[源代码地址]https://gitee.com/depressiom/node.git

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值