美文网首页
从零单排的nodejs

从零单排的nodejs

作者: Alkaidx | 来源:发表于2017-10-09 17:36 被阅读25次

    nodejs使用简要

    给个理由

    能用javaScript写后台,还需要什么理由.
    

    从安装开始

    1. 在windows上我就不多说
    2. 在linux上,使用apt-get一类的方式安装之外,还可以通过编译安装.
      1. 确保系统下g++版本在4.6以上,Python版本在2.6以上.
      2. 从[nodejs.org](https://nodejs.org)下载tar.gz后缀的NodeJS最新版源代码包并解压到某个位置.
      
    3. 进入解压到的目录,使用以下命令编译和安装.
    
             $ ./configure
             $ make
             $ sudo make install
    
    4. 开始运行
        打开终端,键入`node`进入命令交互模式,可以输入一条代码后立即执行并显示结果
         ```shell
         $ node
         > console.log('hello world!')
         hello world!
         ```
        当然,一般咱们是先写一个`js`文件,然后在终端的目录下键入`node xx.js`运行
    

    更新及版本选择

    1. 可以使用nvm以及n来进行版本管理(简单说说),下面两个用一个就好。
    2. n如何使用
    
    $ sudo npm install n -g
    $ sudo n stable     //升级node至最新的稳定版
    $ sudo n latest     //安装最新版
    $ sudo n 6.4.0      //安装指定版本
    
    3. nvm如何使用(nvm不依赖npm)
        1. 通过脚本文件自动安装(apt-get/yum)
        2. 通过源码安装
    
    $ git clone https://github.com/creationix/nvm.git ~/.nvm
    $ cd ~/.nvm
    $ source ~/.nvm/nvm.sh # 将这一行加入到shell配置文件中,根据环境不同,可能是~/.bashrc, ~/.profile, 或 ~/.zshrc
    
        3. 如何使用
    
    安装某版本的node
    $ nvm install 0.10.26 #安装nodejs v0.10.26   
    删除某版本的node
    $ nvm uninstall 0.10.26
    $ nvm uninstall default
    

    模块

    当我们需要写稍大点的程序,不可能都放在一个文件里,所以一般都会将代码模块化.
    Node.js采用模块化结构,按照[CommonJS规范](http://wiki.commonjs.org/wiki/CommonJS)定义和使用模块。
    在`NodeJS`中,一般将代码合理拆分到不同的`js`文件中,每一个文件就是一个模块,而文件路径就是模块名.除了咱们自己写,还可以使用别人写好的模块,那么就得使用一个神器,叫npm(**Node Package Manager**),一般安装node的时候就安装上了npm,我们进入终端输入:
    
    > npm -v
    5.4.2
    

    NPM 资料

    咱们顺带说说npm,因为nodejs中命令行用的比较多,很多时候就是使用这个npm,说起来呢npm本身也不是很复杂,但是功能很强大,本质上只做一件事,管理模块,无论是下载还是升级,卸载,都可以用npm,甚至还能用npm升级npm
    1. 因为服务器的原因,可能速度会很慢,所以换一个源(taobao源)
    
    npm config set registry https://registry.npm.taobao.org
    // 配置后可通过下面方式来验证是否成功
    npm config get registry
    // 或npm info express
    
    2. 安装插件
        1. *本地安装*:就是只能当前目录使用 `npm install <Module  Name>`
            1. 将安装包放在 `./node_modules` 下(运行 npm 命令时所在的目录),如果没有` node_modules` 目录,会在当前执行 `npm` 命令的目录下生成 `node_modules` 目录。
            2. 可以通过 `require()` 来引入本地安装的包。
        2. *全局安装*:任何地方都能使用    `npm install <Modlue Name> -g`
            1. 将安装包放在 `/usr/local` 下或者你 `node` 的安装目录。
            2. 可以直接在命令行里使用。
    
        tip:如果出现以下错误:`npm err!  Error: connect ECONNREFUSED 127.0.0.1:8087`
    解决办法为:`$ npm config set proxy null`
    
    3. 常用命令
    
    npm list / ls           查看所有本地安装的模块
    npm ls  -g              查看所有全局安装的模块
    
    npm uninstall <Module Name>   卸载模块
    npm update                    更新npm
    npm update <Module Name>      更新模块
    npm init                初始化生成一个新的`package.json`文件
    npm run xxx             执行`package.json`里`scripts`字段,可以用于指定脚本命令
    

    自定义模块

    下面是一个最简单的模块,假定新建一个foo.js文件,写入以下内容
    
    // foo.js
    
    module.exports = function(x) {
        console.log(x);
    };
    
    上面代码就是一个模块,它通过module.exports变量,对外输出一个方法。
    

    使用模块

    *node的核心模块*
    
    http:提供HTTP服务器功能。
    url:解析URL。
    fs:与文件系统交互。
    querystring:解析URL的查询字符串。
    child_process:新建子进程。
    util:提供一系列实用小工具。
    path:处理文件路径。
    crypto:提供加密和解密功能,基本上是对OpenSSL的包装。
    
    `require`命令用于指定加载模块,*加载时可以省略脚本文件的后缀名*。
    `require`方法的参数是模块文件的名字。它分成两种情况,第一种情况是参数中含有文件路径(比如上例),这时路径是相对于当前脚本所在的目录,第二种情况是参数中不含有文件路径,这时Node到模块的安装目录,去寻找已安装的模块
    
    // index.js
    
    var http = require('http')         //加载默认模块http
    var express = require('express');    //加载express模块(得用npm install express)
    
    var m = require('./foo');            //上文的自定义模块
    
    m.print("这是自定义模块");
    

    http协议

    Node基础

    node全局

    *node的全局对象*
    
    global:表示Node所在的全局环境,类似于浏览器的window对象。需要注意的是,如果在浏览器中声明一个全局变量,实际上是声明了一个全局对象的属性,比如var x = 1等同于设置window.x = 1,但是Node不是这样,至少在模块中不是这样(REPL环境的行为与浏览器一致)。在模块文件中,声明var x = 1,该变量不是global对象的属性,global.x等于undefined。这是因为模块的全局变量都是该模块私有的,其他模块无法取到。
    
    process:该对象表示Node所处的当前进程,允许开发者与该进程互动。
    
    console:指向Node内置的console模块,提供命令行环境中的标准输入、标准输出功能。
    
    *node的全局函数*
    
    setTimeout():用于在指定毫秒之后,运行回调函数。实际的调用间隔,还取决于系统因素。间隔的毫秒数在1毫秒到2,147,483,647毫秒(约24.8天)之间。如果超过这个范围,会被自动改为1毫秒。该方法返回一个计时器对象。
    clearTimeout():用于终止一个setTimeout方法新建的定时器。
    setInterval():用于每隔一定毫秒调用回调函数。由于系统因素,可能无法保证每次调用之间正好间隔指定的毫秒数,但只会多于这个间隔,而不会少于它。指定的毫秒数必须是1到2,147,483,647(大约24.8天)之间的整数,如果超过这个范围,会被自动改为1毫秒。该方法返回一个计时器对象。
    clearInterval():终止一个用setInterval方法新建的定时器。
    require():用于加载模块。
    Buffer():用于操作二进制数据。
    
    *node的全局变量*
    
    __filename:指向当前运行的脚本文件名。
    __dirname:指向当前运行的脚本所在的目录。
    

    异常处理

    因为nodejs是异步单线程,所以如果中间出错了,就可能会发生整个程序的错误,所以,在nodejs中异常处理对于程序的稳定运行极为重要(其实对任何程序都很重要)。
    一般来说,Node有三种方法,传播一个错误。
        1. 使用throw语句抛出一个错误对象,即抛出异常。
        2. 将错误对象传递给回调函数,由回调函数负责发出错误。
        3. 通过EventEmitter接口,发出一个error事件。
    最常用的捕获异常的方式,就是使用try…catch结构。但是,这个结构无法捕获异步运行的代码抛出的异常,所以Node只在很少场合才用try/catch语句,比如使用`JSON.parse`解析JSON文本。
    *Node采用的方法,是将错误对象作为第一个参数,传入回调函数。*
    回调函数的第一个参数就是一个错误对象,这是为了处理异步操作抛出的错误。
    

    参考资料:
    nodejs 入门
    阮一峰node教程
    nodejs 基础教程
    七天学会nodejs
    Nodejs API 中文文档
    Node.js 包教不包会
    使用 Express + MongoDB 搭建多人博客

    相关文章

      网友评论

          本文标题:从零单排的nodejs

          本文链接:https://www.haomeiwen.com/subject/cappyxtx.html