Web全栈笔记之node.js第一章

一、什么是node

node是js语言的服务器运行环境(类似于php和apache)
nodejs提供大量的工具库,使得javascirpt可以调用操作系统级别的api。
node采用谷歌的v8引擎(javascipt语言解释器),速度非常快跟js环境不一样,一个是运行在服务器,一个运行在客户端,node是一个基于事件驱动和异步io的服务器javascript环境

回调:异步编程的基本方法,采用后续函数传递的方式,把后续的处理函数作为参数进行执行

同步和异步(阻塞非阻塞):AJAX的时候说过

IO:input outputer
输入 输出,对应的就是下单操作

单线程和多线程
单线程按顺序执行,多线程可以同时执行

二、引入HTTP的模块
  • 1.require(‘http’); 引入一个HTTP的模块
  • 2.server = http.createServer(function(req,res)) 创建一个HTTP服务器
    function:
    req:request请求对象
    res:response:响应对象
    res.write
    res.end
  • 3.server.listen(port,function)监听响应
    “`javascript
    //require(‘http’); 引入一个HTTP的模块;
    var http = require(“http”);
    var server = http.createServer(function(req,res){// 创建一个HTTP服务器
    res.write(“响应内容”);//可以被执行多次;
    res.end(“响应结束”);//结束之前输出的内容
    })
    //server.listen(port,function)监听响应
    server.listen(8080,function(){
    console.log(“开启成功:http://localhost:8080“);
    })

##### 三、HTTP请求
 * req.url:'/',请求的地址  '/'根目录
 * req.method: 'GET' 请求方式
 * 发送 HTTP 头部
 * HTTP 状态值: 200 : OK
 * 内容类型: text/html
 * res.writeHead(200,{Content-Type:xxx})
 * http://tool.oschina.net/commons
```javascript
var http = require('http');//引入一个HTTP的模块
var server = http.createServer(function (req,res){// 创建一个HTTP服务器
    //设置请求头 res.writeHead(HTTP状态值,{"内容类型":"text/html;charser:utf-8"})
    res.writeHead(200,{"Content-Type":"text/html;charser:utf-8"})
    //判断页面输入的地址
    if(req.url=="/index"||req.url=="/"){
        res.end("首页");
    }else if(req.url=="/login"){
        res.end("登陆页");
    }else{
        res.writeHead(404);//向请求的客户端发送响应头。
        res.end("404:没有找到该页面");
    }




<div class="se-preview-section-delimiter"></div>
四、引入url的模块
  • url模块
  • url = require(‘url’);
  • url.parse(url,bol);
var http = require('http');//引入一个HTTP的模块
var url = require('url');//引入一个url的模块
var server = http.createServer(function (req,res){
    //如果第二个参数是true 返回的query 是一个json格式,否则是字符串
    var oUrl = url.parse(req.url,true);
    console.log(oUrl);
    res.end("end");
})
server.listen(8080,function(){
    console.log('开启成功')
});




<div class="se-preview-section-delimiter"></div>
五、require(引入路径)
note.js部分
//连接test文件夹
var test = require("test");
/*require(文件名):如果 路径.js 存在 执行加载 并 返回
如果 路径.node 存在 执行加载 并 返回 如果 路径/package.json 存在
执行加载(package.json 中 main属性对应的路径) 并 返回 否则 抛出异常
注:如果没有package.json需要创建 设置路劲
*/
test.show();




<div class="se-preview-section-delimiter"></div>
package.json部分
{
  "name": "test",
  "version": "0.0.1",
  "main":"abc.js"
}




<div class="se-preview-section-delimiter"></div>

注:package.json里面不能写注释,会报错

abc.js部分
function show(){
    console.log("abc.js");
}
function sum(a,b){
    console.log(a+b);
}
//module.exports等于reture 返回出去(个人理解)
module.exports.show = show;
module.exports.sum = sum;




<div class="se-preview-section-delimiter"></div>
六、buffer对象
  • js语言自身只有字符串数据类型,没有二进制类型
  • buffer:缓存器区,暂时存放在内存里的一段数据
  • 由一个八位字节一个元素组成的数组,单位用16进制表示,取值范围0-255
//创建buffer对象的方法:
//1.直接创建
var buf = new Buffer(6);
buf.fill(255);//填充255 输出buf=6个 ff
console.log(buf);

//2.通过数组
var buf2= new Buffer([255,100,5,0xbb])
console.log(buf2);

//3.通过字符串 一个中文 等于 00 00 00 三个buffer;
var buf3 = new Buffer("内容");
console.log(buf3);

//把buf转为字符串
console.log(buf3.toString());
//创建指定的buffer转为字符串
var buf4= new Buffer([0xe5,0x86,0x85]);
console.log(buf4.toString());




<div class="se-preview-section-delimiter"></div>
七、文件系统模块(fs)
  • 读取文件方法
  • readFile(异步)
  • readFileSync(同步)

//异步模式(一起执行)
var fs = require('fs');
fs.readFile("test/abc.txt",function(err,data){
    if(err){console.log(err);return;}
    console.log(data.toString());
    console.log(2);
});




<div class="se-preview-section-delimiter"></div>
//同步模式(一句句执行)
var con = fs.readFileSync("test/abc.txt");
console.log(con.toString());
console.log(2);
八、文件操作(目录操作)
//加载fs模块
var fs = require("fs");
/*
 *  777分别代表所有者,组用户,其他用户所具有的权限
 *  1 = 执行 2 = 写  4 = 读  1+2+4=7 *
 */

//1.创建文件mkdir(路径/文件字,权限 ,fn(err))
fs.mkdir("test/abc1",0777,function(err){
返回失败信息
    if(err){console.log("创建失败:"+err);return;}
    console.log("创建成功");
});

//2.读取目录所有文件readdir(url,fn(err,files))
fs.readdir("./",function(err,files){
    console.log(files)
})

//3.判断文件是否存在
// fs.existsSync(urlstr)
var bol=fs.existsSync("test/abc.txt");
console.log(bol);

//4.获取文件或文件夹的详细信息
// var stat = fs.lstatSync(urlstr);
var stat = fs.lstatSync("test/abc.txt");
console.log(stat);

//5.如果是文件返回true否则false
var isfile = stat.isFile();
console.log(isfile);
九、stream
  • stream,主要是用在大数据处理.
  • var rs = createReadStream创建一个可读流
  • var ws = createWriteStream创建一个可写流
  • pipe该方法从可读流中拉取所有数据,并写入到所提供的目标。
  • rs.on(‘data’,fn(data))每读64K或读完触发的时间
  • rs.on(“end”)
var fs = require("fs");
var rs = fs.createReadStream("111.zip");
var ws = fs.createWriteStream("test/a.zip");
//过程
var i = 0;
//每读取64KB触发下面的函数
rs.on("data",function(){
    i++;
    console.log(i);
}
//输出结束时候的i
rs.on("end",function(){
    console.log(i);
})
rs.pipe(ws);
10、post
//加载http模块
var http = require("http");
//加载fs模块
var fs  = require("fs");
var server = http.createServer(function(req,res) {//创建一个http模块
    var isfile = false;
    //判断文件是否存在
    var bol = fs.existsSync("www" + req.url);
    if (bol) {
        //获取文件信息
        var stat = fs.lstatSync("www" + req.url);
        isfile = stat.isFile();//查看是否文件 是返回true 否则false
    }
    //判断打开的是/
    if (req.url == '/') {
        //打开文件 fs.readFile(路径,(fn(err,data)(回调函数){}) 打开输出的是Buffer数据
        fs.readFile("www/index.html", function (err, data) {
            res.end(data.toString());//Buffer转换字符串 输出
        })
    } else if (isfile) {
        //如果是文件夹 使用stream流传输
        var rs = fs.createReadStream("www" + req.url);
        rs.pipe(res);
    }
    else {
        //全部不是返回404
        res.end();
    }
})
server.listen(8080,function(){
    console.log('开启成功:http://localhost:8080')
});
优化版本

“`
var server = http.createServer(function(req,res) {//创建一个http模块
var url = req.url;
if(url==”/”){
url=”/index.html”;//默认当前目录读取当前index文件
}
var isfile =false;
//判断文件
var bol=fs.existsSync(“www”+url);
if(bol){
//获取文件信息
var stat = fs.lstatSync(“www”+url);
isfile = stat.isFile();//查看是否文件
}
//判断是否是文件夹
if(isfile){
//如果是文件夹 使用stream流传输
var rs = fs.createReadStream(“www”+url);
rs.pipe(res);//请求打开文件www+ulr 例如/www/index.html
}
else{
//全部不是返回404
res.end(“404”);
}
console.log(req.url);
});
server.listen(8080,function(){
console.log(‘开启成功:http://localhost:8080‘)
});

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值