Node.js介绍


  • Node.js 诞生于2009年,Node.js采用C++语言编写而成,是 一个Javascript的运行环境。Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境 ,让JavaScript的运行脱离浏览器端,可以使用JavaScript语言 书写服务器端代码。

安装Node.js

Node.js官网下载稳定版本,node偶数版本为稳定版本,奇数版本为非稳定版本。

  • mac 直接安装 或者 brew来安装

  • 安装完Node.js会自动安装NPM(Node Package Manager):包管理工具;

  • 通过指令 node -v 来查看是否安装完成和查看node版本号;npm -v 来查看npm版本。

使用Node.js实现第一个服务器

初步感受Node.js

//引入http模块
let http = require("http");
//创建一个服务器
let serve = http.createServer((req,res)=>{
console.log("hello");
res.end("hello world");
})
//设置端口号
serve.listen(3000);
  • Google Chrome 默认非安全端口列表,尽量避免以下端口。

    1, // tcpmux

    7, // echo

    9, // discard

    11, // systat

    13, // daytime

    15, // netstat

    17, // qotd

    19, // chargen

    20, // ftp data

    21, // ftp access

    22, // ssh

    23, // telnet

    25, // smtp

    37, // time

    42, // name

    43, // nicname

    53, // domain

    77, // priv-rjs

    79, // finger

    87, // ttylink

    95, // supdup

    101, // hostriame

    102, // iso-tsap

    103, // gppitnp

    104, // acr-nema

    109, // pop2

    110, // pop3

    111, // sunrpc

    113, // auth

    115, // sftp

    117, // uucp-path

    119, // nntp

    123, // NTP

    135, // loc-srv /epmap

    139, // netbios

    143, // imap2

    179, // BGP

    389, // ldap

    465, // smtp+ssl

    512, // print / exec

    513, // login

    514, // shell

    515, // printer

    526, // tempo

    530, // courier

    531, // chat

    532, // netnews

    540, // uucp

    556, // remotefs

    563, // nntp+ssl

    587, // stmp?

    601, // ??

    636, // ldap+ssl

    993, // ldap+ssl

    995, // pop3+ssl

    2049, // nfs

    3659, // apple-sasl / PasswordServer

    4045, // lockd

    6000, // X11

    6665, // Alternate IRC [Apple addition]

    6666, // Alternate IRC [Apple addition]

    6667, // Standard IRC [Apple addition]

    6668, // Alternate IRC [Apple addition]

    6669, // Alternate IRC [Apple addition]

模块化

一、为什么会有模块化

  • 在JavaScript发展初期就是为了实现简单的页面交互逻辑,寥寥数语即,如今随着前端代码日益膨胀

    这时候JavaScript作为嵌入式的脚本语言的定位动摇了,JavaScript却没有为组织代码提供任何明显帮助,JavaScript极其简单的代码组织规范不足以驾驭如此庞大规模的代码;

二、Node.js中的模块化 commonjs规范

  • CommonJS就是为JS的表现来制定规范,因为js没有模块的功能所以CommonJS应运而生,它希望js可以在任何地方运行,不只是浏览器中。

    1、创建自定义模块

    • 引入一个文件 形式模块

      home.js执行文件

      //通过require来引入
      require("./aModule"); //注意一定要有"./",文件后缀可加可不加。

      amodule.js文件

      console.log("我是amodule模块111");
    • 引入文件夹形式模块

      • home.js执行文件
      require("./aModuledir"); //必须加"./"

      ​ aModuleDir里的index.js文件,会自动查找文件夹下的index.js文件执行

      console.log("我是aModule模块文件夹");
      • 当然也可以配置默认启动文件,在文件夹内新建package.json来指定执行文件
      {
      "name":"aModule",
      "version":"1.0.0",
      "main":"test.js"
      }
  • 自定义模块的按需导出

    通过module.exports 导出; ___dirname , __filename

    module.exports = {
    a:"我是a的值",
    b(){
    console.log("我是导出的b函数");
    }
    }

    引入导出文件

    let mymodule = require("bModule");
    console.log(mymodule.a);
    mymodule.b();

    或者 通过 exports来导出

    exports.fn = function(){
    console.log("我是fn函数");
    }

    导入文件

    let myfn = require("bModule").fn;
    myfn();
    // 或者 通过解构赋值
    let { fn } = require("bModule");
    fn();
  • 模块加载的优先级 ,先文件再目录;

2、内置模块;

nodejs内置模块有:Buffer,C/C++Addons,Child Processes,Cluster,Console,Cr

ypto,Debugger,DNS,Domain,Errors,Events,File System,

Globals,HTTP,HTTPS,Modules,Net,OS,Path,Process,P unycode,Query Strings,Readline,REPL,Stream,String De coder,Timers,TLS/SSL,TTY,UDP/Datagram,URL, Utilities,V8,VM,ZLIB;内置模块不需要安装,外置模块需要安装;

npm包管理器

NPM(Node Package Manager) 官网的地址是 npm官网

  • npm常用指令;

    • npm init:引导创建一个package.json文件
    • npm help(npm -h) :查看npm帮助信息
    • npm version (npm -v) : 查看npm版本;
    • npm search:查找
    • npm install (npm i):安装 默认在当前目录,如果没有node_modules 会创建文件夹;
      • npm install module_name -S 或者--save 即 npm install module_name --save 写入dependencies
      • npm install module_name -D 或者 —save-dev 即 npm install module_name --save-dev 写入devDependencies
      • npm install module_name -g 全局安装(命令行使用)
      • 指定版本安装模块 npm i module_name @1.0 通过 "@"符号指定;
    • npm update(npm -up):更新
    • npm remove 或者 npm uninstall:删除
    • npm root 查看当前包安装的路径 或者通过 npm root -g 来查看全局安装路径;

fs模块

  • fs是文件操作模块,所有文件操作都是有同步和异步之分,特点是同步会加上 "Sync" 如:异步读取文件 "readFile",同步读取文件 "readFileSync";

    文件操作

    • 文件读取:

      • 异步读取
      let fs = require("fs");
      fs.readFile("1.txt",(err,data)=>{
      if(err){
      return console.log(err);
      }
      console.log(data.toString());
      })
      • 同步读取文件
      let fs = require("fs");
      let res = fs.readFileSync("1.txt");
      console.log(res.toString());
    • 文件写入:

      let fs = require("fs");
      //flag配置 "a":追加写入,"w":写入,"r":读取
      fs.writeFile("2.txt","我是要写入的内容",{flag:"w"},err=>{
      if(err){
      return console.log(err);
      }
      console.log("写入成功");
      })
    • 文件删除

      fs.unlink("2.txt",err=>{
      if(err){
      return console.log(err);
      }
      console.log("删除成功");
      })
    • 复制文件

      • 先读取文件再写入文件
      function mycopy(src,dest){
      fs.writeFileSync(dest,fs.readFileSync(src));
      }
      mycopy("1.txt","4.txt");
    • 修改文件名,目录也可以通过rename来操作

    fs.rename("1.txt","5.txt",function (err) {

    if(err){

    console.log(err);

    }else{

    console.log("修改成功");

    }

    });


    - 判断文件是否存在 ```js
    fs.exists("4.txt",function (exists) {
    console.log(exists);
    })

buffer缓冲区

  • buffer的创建

    • 直接创建
    • 数组创建
    • 字符串创建
    • 乱码的处理
    • buffer转换tostring

stream流

  • stream流:流与数据处理方面密不可分

    • 流的原理
    • 流数据的获取
      • pipe
      • data
      • end
    • copy的流方法实现
    • 加载视图的流方法实现

总结

  • nodejs的安装及使用

  • 服务端及客户端

  • commonjs模块化

  • fs模块的使用(文件操作及目录操作)

  • stream

  • buffer

node.js初步的更多相关文章

  1. node.js初步总结

    一:先上一段代码 process.argv.forEach(function (val, index, array) {    console.log(index + ":" + ...

  2. 多语言(Java、.NET、Node.js)混合架构下开源调用链追踪APM项目初步选型

    1. 背景 我们的技术栈包括了Java..NET.Node.js等,并且采用了分布式的技术架构,系统性能管理.问题排查成本越来越高. 2. 基本诉求 针对我们的情况,这里列出了选型的主要条件,作为最终 ...

  3. 初步了解Node.js,学做简单的留言本案例

    在还没有正式的学Node.js的时候, 你们认为Node.js 对于前端来说是什么呢? 会认为Node.js 是框架? 认为这是类似Jquery的一个快速.简洁的JavaScript框架? 反正我自己 ...

  4. node.js module初步理解

    在开发一个复杂的应用程序的时候,我们需要把各个功能拆分.封装到不同的文件,在需要的时候引用该文件.没人会写一个几万行代码的文件,这样在可读性.复用性和维护性上都很差,几乎所有的编程语言都有自己的模块组 ...

  5. Node.js 的初步理解

    Node.js 是一个采用C++语言编写的后端的 Javascript 的运行环境, 它使用了 google 的 V8虚拟机来解释和执行代码.Node.js 的有许多有用的内置的模块,比如 http, ...

  6. 初步揭秘node.js中的事件

    当你学习node.js的时候,Events是一个非常重要的需要理解的事情.非常多的Node对象触发事件,你能在文档API中找到很多例子.但是关于如何写自己的事件和监听,你可能还不太清楚.如果你不了解, ...

  7. Node.js机制及原理理解初步【转】

    一.node.js优缺点 node.js是单线程. 好处就是 1)简单 2)高性能,避免了频繁的线程切换开销 3)占用资源小,因为是单线程,在大负荷情况下,对内存占用仍然很低 3)线程安全,没有加锁. ...

  8. node.js中的路由(url)初步

    1.建立n4_root.js var http = require('http'); var url = require('url'); //这是node.js中自带的var router = req ...

  9. Node.js机制及原理理解初步

    http://blog.csdn.net/leftfist/article/details/41891407 一.node.js优缺点 node.js是单线程. 好处就是 1)简单 2)高性能,避免了 ...

随机推荐

  1. 用jekyll和github把网站建起来!

    先把这些天学习的用jekyll在github上搭建网站的步骤记录下来,留作参考. #安装jekyll 确定系统安装 Git, Ruby, RubyGems, Nodejs, Python2.7. 如何 ...

  2. Docker深入浅出系列 | 单机Nginx+Springboot实战

    目录 Nginx+Springboot实战 前期准备 实战目标 实战步骤 创建Docker网络 搭建Mysql容器 搭建额度服务集群 搭建Nginx服务 验证额度服务 附录 Nginx+Springb ...

  3. 学h5前端开发前必知的三大流行趋势

    学h5前端开发前必知的三大流行趋势 随着互联网时代的飞速发展,各种互联网的Web应用程序层出不穷,很多人对于HTML5前端开发的过程充满了好奇,但是却没有了解到前端开发的未来发展趋势.下面,云慧学院专 ...

  4. LeetCode 81.Search in Rotated Sorted Array II(M)

    题目: Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand. ( ...

  5. 分享一个基于Net Core 3.1开发的模块化的项目

    先简单介绍下项目(由于重新基于模块化设计了整个项目,所以目前整个项目功能不多) 1.Asp.Net Core 3.1.2+MSSQL2019(LINUX版) 2.中间件涉及Redis.RabbitMQ ...

  6. Let’s Encrypt https证书安装

    我的博客: https://www.seyana.life/post/15 现在已经有很多的免费ssl证书提供商,国内的也有, 不过国内政策要求还要把key给他们, 我们还是用Let's Encryp ...

  7. 修复Nginx的WebDAV功能

    如果想使用WebDAV来实现文件共享,尤其是想使用操作系统内置功能来挂载文件系统的话,省心的话还是用Apache吧. 下文介绍如何用Nginx来实现这个目标.Windows内置的客户端是Microso ...

  8. 俊哥的blog的一道题

    题目: 实现一个person对象,有eat和dinner两种方法 请用实例[依次类推] new person('Tom').sleep(10).eat('dinner'); //输出 console. ...

  9. Redis系列六 - 浅谈如何设计秒杀系统

    前言 设计一个系统之前,我们肯定要先确认系统业务场景是怎样的,下面就以某电商平台上的秒杀活动为场景,一起来探讨一个秒杀系统改如何去设计. 场景 我们现在要卖100件纸尿布,按照系统的用户量及以往经验来 ...

  10. 使用mitmproxy抓包手机APP的配置步骤

    转: https://www.jianshu.com/p/8ee3f9f46d7a 注意 1. 手机安装完证书之后还有一步 “证书信任设置” 操作 2. 手机设置代理的时候 ip地址和电脑本机是一样的