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. linux下好用软件全记录

    开发工具 1. Shutter 抓图工具(用过linux最好的抓图工具,类似win下的Snagit) 2. RabbitVCS SVN客户端(可以和subversion媲美的svn客户端) 3. My ...

  2. 手写实现vue的MVVM响应式原理

    文中应用到的数据名词: MVVM   ------------------        视图-----模型----视图模型                三者与 Vue 的对应:view 对应 te ...

  3. webpack插件

    插件 plugins:[ new ExtractTextPlugin.extrct({ }) //创建html new HtmlWebpackPlugin({ title:"first pa ...

  4. Channel Estimation for High Speed Wireless Systems using Gaussian Particle Filter and Auxiliary Particle Filter

    目录 论文来源 摘要 基本概念 1.时变信道 2.粒子滤波 3.高斯粒子滤波 4.辅助粒子滤波 比较 借鉴之处 论文来源 International Conference on Communicati ...

  5. .NET Core C#目录

    .NET Core技术开发指南 简介 本系列教程是一份关于微软.NET Core技术栈的全面的教程,其中涉及了C#.Typescript.Angular.Redis等一系列的教程.其中教程中通常会含有 ...

  6. Qt_QChart的使用记录(小白)

    主要是记录柱状图的数值显示,散点图的点坐标显示(防止后续忘记,把文件都贴出来,方便复查) 资源库: WarehouseInputOrOutput.pro QT += core gui QT += ch ...

  7. h5单页面布局

    前段时间做了一个PC端单页面应用 GitHub因为项目开始的比较仓促,加上本人前端经验特别少,虽然项目大体完成了,但是页面布局确成立它的硬伤...为了填补心里落差,专门做了一个h5的单页面布局,代码很 ...

  8. 在windows上极简安装GPU版AI框架(Tensorflow、Pytorch)

    在windows上极简安装GPU版AI框架 如果我们想在windows系统上安装GPU版本的AI框架,比如GPU版本的tesnorflow,通常我们会看到类似下面的安装教程 官方版本 安装CUDA 安 ...

  9. Anroid关于fragment控件设置长按事件无法弹出Popupwindows控件问题解决记录

    一.问题描述     记录一下最近在安卓的gragment控件中设置长按事件遇见的一个坑!!!     在正常的activity中整个活动中设置长按事件我通常实例化根部局,例如LinearLayout ...

  10. 基于springcloud搭建项目-公共篇(二)

    上一篇已经写过如何搭建注册中心eureka,这一篇主要是搭建一些公共的api接口服务,并把实体类单独拿出来放到一个服务上引用,比较简单的 1.首先.创建一个实体类服务,这样就不用在每个服务里创建实体了 ...