Node.js学习笔记

NodeJs的API文档

参考视频资料


参考资料:
在这里插入图片描述

持续学习,持续更新…

Node.js概述

Node.js是运行在服务端的JavaScript。
Node.js是一个基于Chrome JavaScript运行时建立的一个平台。

Node.js能做什么?

Web服务后台
命令行工具:

  • npm(node)
  • hexo(node)
  • git(C语言)

对于前端开发工程师来讲,接触 node最多的是它的命令行工具。
自己写的很少,主要是使用别人第三方发的

  • webpack
  • gulp
  • npm

能学到什么?

1.B/S编程模型

  • Node只是作为我们学习BS编程模型的一个工具而已
    2.模决化编程
  • RequireJs
  • SeaJS
  • @import (‘文件路径’)
    -在 Node中可以像@import()一样来引用加载JavaScript脚本文件
    3.Node常用API
    4.异步编程
  • 回调函数
  • Promise
  • async
  • generator
    5.Express开发框架
    6.ES6

写文件简单的错误处理

//写
var fs=require('fs');
fs.writeFile( './data/你好.md ','大家好,给大家介绍一下,我是Node.js ' , function (error){console.log('文件写入成功")
});
//读
fs.readFile( ' ./data/a.txt ', function (error,data) {
//<Buffer 68 65 6c 6c 6f 20 6e 6f 64 65 6a 73 ed ea>
//文件中存储的其实都是二进制数据 0 1
//这里为什么看到的不是0和1呢?原因是二进制转为16 进制了
//但是无论是二进制01还是16进制,人类都不认识
//所以我们可以通过tostring方法把其转为我们能认识的字符
// console.log(data)
//console.log(data.toString());
if (error) {
console.log( '读取文件失败了");
}else {
console.log(data.tostring());
}
});
//写
fs.writeFile( './data/你好.md''大家好,给大家介绍一下,我是Node.js ', function (error){
// console.log('文件写入成功")
// console.log(error)
if (error) {
console.log( '写入失败');
}else {
console.log('写入成功了");
}
})

简单的http服务

//构建一个Web服务器
//http核心模块

//1.加载http核心模块
var  http = require('http');
//2.使用http.creatServer()方法创建一个Web服务器
//返回一个Server实例

// var server = http.createServer(function (request, response) {
//   response.writeHead(200, {'Content-Type': 'text/plain'});
//   response.end('Hello World');
// }).listen(8081);

// console.log('Server running at http://127.0.0.1:8081/');

//返回一个Server实例
var server = http.createServer();
//3.服务器要干嘛?
// 提供服务:对数据的服务
// 发请求
// 接收请求
// 处理请求
// 给个反馈(发送响应)

//注册request请求事件,就会自动触发服务器的request请求事件,
//然后执行第二个参数:回调处理
server.on('request',function(){
    console.log('收到客户端的请求了');
});
//4.绑定端口号。启动服务器
server.listen(3000,function(){
   //http://127.0.0.1:3000
    console.log("服务器启动成功!");
});

发送响应

请求事件处理函数,接收两个参数

  • request 请求对象

  • response 响应对象(回调函数)

server.on('request',function(request,response){
   console.log('已经收到客户端得请求');

});

var  http = require('http');

var server = http.createServer();

server.on('request',function(request,response){
    console.log('收到客户端的请求了');
    //如果在浏览器里127.0.0.1:3000/a
//则终端显示:
    //收到客户端的请求了
    //请求路径是:/a
    console.log("请求路径是:"+request.url);
    //response对象的方法之一:write,用于像客户端发送响应数据
    //write可以多次使用,最后用end结束响应,否则客户端一直等待
    
    //运行不成功可能是浏览器或者网络问题。已解决
    response.write('hello');//请求路径是:/favicon.ico
    //告知响应结束,传递给用户
    response.end();
    //ps:url统一资源定位图
    //通过不同路径响应不同内容

    
});

server.listen(3000,function(){
   
    console.log("服务器启动成功!");
});

通过不同路径响应不同内容

不同路径不同响应:req.url,获取到端口之后得那一部分路径

var url = req.url; not defined
解决办法:Link

JSON.parse()或者JSON.stringify()

响应内容只能是字符串和二进制数据可用JSON.parse()或者JSON.stringify()转换

var http = require('http');
var server=http.createServer();
server.on('request',function(request,response){  
    //不同路径不同响应:req.url,获取到端口之后得那一部分路径
    // var url = req.url; not defined
    var url = request.url;
    ///re.url ➡not defined
    // console.log(request.url);
    if(url==='/'){
        response.end('index page');
    }
    else if(url==='/baidu'){
        response.end('baidu page');
    }else{
        response.end('404 Not Found');
    }
    //响应内容只能是字符串和二进制数据,
    //可用JSON.parse()或者JSON.stringify()
    
});
// server.listen(80,function(){
//     //80端口为默认:127.0.0.1

//     console.log('Server start success');
// });

server.listen(3000,function(){
    console.log('Server start success');
});

Node中的JavaScript

核心模块

NodeJs的API文档
Node为JavaScript提供了很多服务器级别的API,这些API大多数包装到了一个具名的核心模型中。

例如文件操作fs核心模块:

var fs = require('fs');
var http = require('http');
//获取cpu的信息
var os =require('os');
console.log(os.cpus());

任何你需要的模块都可以从API文档中调取模块进行配置。

模块系统

一个浏览器如何执行多个文件?(加载与导出)

1.require是一个方法

  • 用于加载模块并执行里面的代码
  • 拿到加载文件模块导出的接口对象,export默认是一个空对象
var ret=require('./b'); //输出:{},即b文件是一个空对象
  • 把需要的另一个文件所有需要的被外部访问的成员加载,用exports.挂载到export对象中
//文件b:
             export.s="hello";
             exports.add=function(x,y){
             return  x+y;
             }
             //二者不一样
             add=function(x,y){
             return  x-y;
             }
             var age=20;
             exports.age=age
             
//文件a:
//调用b中的s:
              var m=require('./b');
              console.log(m.s);    //输出:hello
              console.log(m.add(10,20));   //输出30

2.Node模块有三种:

  • 具名的核心模块,:eg:fs 、http
  • 用户自己编写的文件模块
  • 第三方

3.文件的引用通过require(./test.js)来引用。后缀名可以省略。

4.Node中没有全局作用域,只有模块作用域,超出自身文件都没有作用。

  • 如何让模块与模块之间进行通信?

readFile和sExports.readFile()的区别

//文件b:
            exports.readFile=function(path,callback){
            console.log('文件路径',path)}
             
//文件a:
            var fs=require('fs');
            var sExport=require('./b');
              sExport.readFile('.a.js');    //文件路径 ./a.js
            fs.readFile('./a.js')//读的就是a文件
             

ip和端口号

ip

网卡是通过唯一的ip地址来进行定位的
域名通过DNS转换为ip地址

服务器相当于没有关闭的计算机

ip用于定位计算机

端口号

端口号用于定位应用程序

所有需要联网通信的软件都需要具有端口号

默认端口号最好不用。
可以开启多个服务,但是要用不同端口号

API已经高度封装,不需要知道对方ip和port就可以访问,我们可以直接发响应
下面只是举例子

server.on('request',function(){

console.log('请求我的客户端的端口号是',req.socket.remotePort);
});
console.log();
const { Console } = require('console');
var http = require('http');


// var server=http.createServer();
// server.on('request',function(){
//     //API已经高度封装,不需要知道对方ip和port就可以访问,我们直接发响应  
//     console.log('请求我的客户端的端口号是',request.socket.remotePort);
//     Console.log('当前请求我得ip是:',request.socket.remoteAddress)
//     console.log();  
// });
// server.listen(3000,function(){
//     console.log('success!');
// })
const server = http.createServer((req, res) => {
    const ip = res.socket.remoteAddress;
    const port = res.socket.remotePort;
    res.end(`Your IP address is ${ip} and your source port is ${port}.`);
  }).listen(3000);//Your IP address is ::ffff:127.0.0.1 and your source port is 12720.

响应内容类型 Content-Type

在服务端默认发送的数据是utf8编码的内容,但是在浏览器不知道是utf8的内容,浏览器默认解析中文操作系统是gbk。
Solution:正确的告诉浏览器如何解析setHeader('Content-Type','text/plain;charset=utf-8');
http协议中,Content-Type用于告知浏览器数据内容发送的什么类型

Content-Type

Content-Type
text/html识别html标签并utf-8
text/plain普通文本并utf-8
  • 不同资源对应的Content-Type是不一样的
  • 图片不需要指定编码
  • 跟多格式访问网站Link1*Link2查询
var http = require('http');
var server=http.createServer();
var fs=require('fs');
server.on('request',function(req,res){

    var url = req.url;
    if(url==='/s'){
                //如何发动index.html页面
        fs.readFile('./resource/index.html',function(err,data){
            if(err){
                res.setHeader('Content-Type','text/plain;charset=utf-8');
                res.end('文件读取失败,请重试!!');
            }else{
                //data默认的是二进制数据,可以通过toString转换到能识别的字符串
                //res.end();支持二进制和字符串
                res.setHeader('Content-Type','text/html;charset=utf-8');
                res.end(data);
            }
            
            //https://www.oschina.net/
            //https://tool.oschina.net/commons
            //如果访问图片,不需要指定编码。编码一般指字符编码
            // fs.readFile('./resource/2020012175749891.jpg',function(err,data){
            //     if(err){
            //         res.setHeader('Content-Type','text/plain;charset=utf-8');
            //         res.end('文件读取失败,请重试!!');
            //     }else{
            //         //data默认的是二进制数据,可以通过toString转换到能识别的字符串
            //         //res.end();支持二进制和字符串
            //         res.setHeader('Content-Type','image/jpeg');
            //         res.end(data);
            //     }


        }); 
    }
});

server.listen(3000,function(){
    console.log('Server start success');
});

Express框架

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值