node基础知识

492 阅读3分钟

一、node.js起源

    发源人 Ryan Dahl(俄罗斯人)

    2006年开始的网站开发(网页制作)

    2009年是 node 的元年

二、node.js是什么?

    是一个让JavaScript运行在服务器端的一个开发平台,基于V8引擎。它让JavaScript的触角伸到了服务器端,可以与PHP、JSP、Python、ruby、ASP平起平坐。

    node.js没有外部容器,没有其他配置或其他语言支持运行,node没有固定文件夹。

三、node.js与其他后台语言的不同?

    1.node是单线程,其他多线程

    2.没有web容器概念 static

       像在wampServer中里面有www、Apache、php、mysql等语言的支撑才能运行html文         件、这是明文规定,而在node中只要路径正确,放哪里都能运行

四、node.js优缺点

      优点:体积小、高并发、性能优越

      缺点:不适用于大型项目

五、node.js的特点

    单线程:节省内存开销、成本低、并发性高(单线程?一次只能开辟一个进程,等待当前进程完成以后,才能开辟下一个进程,当前进程断掉,服务器崩溃)

    非阻塞I/O:执行效率高、充分利用cpu性能、利用回调函数去执行相应逻辑代码从而体现出事件循环。(非阻塞I/O?依据回调函数访问事件循环)

    事件驱动:触发事件后在回调函数中可以处理一系列循环事件,也称作为“事件环”机制。

六、node的应用场景

     与webSocket配合实时通信:用户表单收集、考试系统、实时聊天、图文直播、提供JSON的API(为前台angular使用)

      node、npm(包管理工具)、express(node里面的插件专门做路由路径)

七、JS中 JSON.parse()、JSON.stringify()、eval()的区别

    JSON.parse():将json字符串转换成json对象。

    JSON.stringify() :将json对象转换成json字符串。

    eval():可计算某个字符串,并执行其中的javascript表达式或要执行的语句。

八、node中http模块

     1.导入http模块:var  http=require("http");

     2.创建服务器:var  server=http.createServer(function(req,res){ })

         其中req 是 request 的简写请求(可以去做路由)   res 是 response 的简写  响应

     3.挂起服务器:server.listen(3000,"127.0.0.1")  localhost

     4.设置请求头  200状态码   内容类型   HTML编码格式

         res.writeHead(200,{"Content-type":"text/html;charse=utf-8"});

     5.响应结束及在页面中输出数据

         res.end((1+2+3+4+5).toString());//响应结束否则会一直加载,还有计算功能

     6.req.url是返回地址栏域名后面的路径:

        默认返回:/favicon.ico 和 /

        返回:/red/green/orange?name="xx"&age=123

     7.往网页中添加内容(可以解析标签)相当于js中的document.write()

         res.write("<h1>内容</h1>");

     8.若想查看所传参数中所包含的内容用:

        console.log(arguments);//输出req和res的所有方法

    9.取到路径中最后一个/后面的路径

       1) req.params[0]  //localhost:3000/teacher/123456 输出123456

       2) 路径获取指定id名  /Children/:id  var id=req.params["id"];

九、node 中 fs 模块加载 fs 模块读取资源模板

     1.导入fs模块:var fs=require("fs")

     2.读取文件:fs.readFile("./green.html",function(err,data){})

     3.写文件:fs.writeFile("./2.txt",data,function(err){}) 用嵌套(读完马上写)

     4.复制文件:fs.copyFileSync("1.txt","4.txt",function(err){}); (待定)

     5.读取文件夹:fs.readdir("./sys/",function(err,files){});

    6.判断是否是一个文件夹:

for(leti=0;i<files.length;i++){   //异步 方法一 isDirectory()判断是否是个文件夹  stat判断是否存在  fs.stat("./sys/"+files[i],function(err,stats){     if(stats.isDirectory()){        arr.push(files[i])     }     console.log(arr)   });   //sync同步 方法二 isDirectory()判断是否是个文件夹   if(fs.lstatSync("./sys/"+files[i]).isDirectory()){       arr1.push(files[i]);   }   console.log(arr1);}

     7.创建文件目录:makdir

十、node 中 url 模块

     1.导入url模块:var url=require("url");

     2.获取url路径(path /)后面的部分:var pathname=url.parse(req.url).pathname

        例如:地址栏输入//http://127.0.0.1:4000/aaa/bbb?name="xx"22&age=20

        获取到的值是 /aaa/bbb

        pathname.indexOf(".")==-1 //返回pathname路径中是否存在点,-1表示不存在

     3.匹配search(?)后面的路径部分:var query=url.parse(req.url,true).query;

        例如:地址栏输入//http://127.0.0.1:4000/aaa/bbb?name="xx"22&age=20

        获取到的值是 { name: '"xx"22', age: '20' } 有true则以对象形式显示

     4.url.parse(req.url).path(获取除了端口以外的/后面的所有字段)

        获取到:/teacher/123456?name=%22xx%22&&age=12

十一、node 中 path 模块

     1.导入path模块:var path=require("path"); //加载路径模块

     2.返回路径中的扩展名 :path.extname(url.parse(req.url).pathname)

        如果path以 ‘.' 为结尾,将返回 ‘.',如果无扩展名 又 不以'.'结尾,将返回空值。

     3.规范化给定的 path,并解析 '..' 和 '.' 片段:path.normalize(req.url)

        例如:path.normalize('C:////temp\\\\/\\/\\/foo/bar');

                   //  Returns: 'C:\\temp\\foo\\bar'

十二、模块

     暴露模块的两种方式及区别

exports暴露模块   module.exports暴露的是一个对象
区别:
    1.module.exports初始值为一个空对象{} 只能出现一次 是个类(构造函数)
    2.exports是指向的module.exports的引用  可以出现多次 不能暴露构造函数
    3.require()返回的是module.exports而不是exports
用法:
    exports:
        exports.msg=msg; //msg是一个变量
        exports.show=show; //show是一个函数
    module.exportsmodule.exports={
            msg:msg,//msg是一个变量
            show:show //show是一个函数
        }
        module.exports=People;  //People是一个构造函数

十三、包管理工具

     npm(国外的,比较全面,下载速度慢)和cnpm(国内的,淘宝镜像,下载速度快,有缺陷)

     指向淘宝镜像:npm --registry registry.npm.taobao.org install 

     npm包管理工具:

        作用:下载插件、库和框架 同时还可以更新包的版本

        用法:npm install 库名 插件名 框架名 -g(全局)

        会自动下载node_modules(项目依赖)文件夹下 注:拷项目时删掉,然后 npm install        安装项目依赖

十四、querystring 模块

     1.导入模板:querystring=require("querystring")  //查询指定的字符串

     2.将一个字符串反序列化为一个对象:querystring.parse(str,separator,eq,options)

参数:str指需要反序列化的字符串;                   
     separator(可省)指用于分割str这个字符串的字符或字符串,默认值为"&";
     eq(可省)指用于划分键和值的字符或字符串,默认值为"=";
     options(可省)该参数是一个对象,里面可设置maxKeys和decodeURIComponent这两个属性:
              maxKeys:传入一个number类型,指定解析键值对的最大值,默认值为1000,如果设置为0时,则取消解析的数量限制;
              decodeURIComponent:传入一个function,用于对含有%的字符串进行解码,默认值为querystring.unescape

十五、上传图片所用的模板

     var http=require("http");//引入http模块

     var formidable=require("formidable");//用 npm 下载引入上传文件模块

     var util=require("util");//工具库

     var fs=require("fs");

     var path=require("path");

     var sd=require("silly-datetime");//用npm下载 时间模块

     sd.format(new Date(),'YYYYMMDD')//获取年月日

十六、ejs模板 用npm 命令下载(jade)模板引擎

     1.ejs是什么?

EJS是一个简单高效的模板语言,通过数据和模板,可以生成HTML标记文本 。
可以说EJS是一个JavaScript库,EJS可以同时运行在客户端和服务器端,
客户端安装直接引入文件即可,服务器端用npm包安装

    2.EJS的特点:

快速编译和渲染                     
简单的模板标签                     
自定义标记分隔符                     
支持文本包含                     
支持浏览器端和服务器端                     
模板静态缓存                     
支持express视图系统

    3.EJS成员函数:

render(str,data,[option]):直接渲染字符串并生成html
    str:需要解析的字符串模板
    data:数据
    option:配置选项

4.EJS常用标签

<% %>流程控制标签                     
<%= %>输出标签(原文输出HTML标签)                     
<%- %>输出标签(HTML会被浏览器解析)                    
<%# %>注释标签                     
% 对标记进行转义                     
-%> 去掉没用的空格
说明:ejs中的逻辑代码全部用JavaScript

十七、express模块 用npm命令下载 主要做路由的

1.概念:Express是目前最流行的基于Node.js的Web开发框架,可以快速地搭建一个完整功能的网站。           
2.加载express模块注:必须下载express包express属于方法                     
  var express=require("express");                  
  var app=express();  //引用express方法          
  app.use(express.static("./views")); //app.use()使用一些插件默认查找index.html
3.koa是基于node.js的下一代的web开发框架   更小,更富有表现力强,更健壮的web框架 。
  generator函数可以免除重复繁琐的回掉函数嵌套            
4.中间件body-parser           
5.cookie-parser           
6.express-session           
7.cookie-session
8.connect-flash