Node js 学习总结 - litonghui/TechBlog GitHub Wiki

简单的说,node js 允许后端运行JavaScript 语言(JS最早是运行在浏览器中,在nodejs中它显然脱离了浏览器),相比于流行的服务器语言(PHP、JAVA、C#、Python),node js 选择使用JavaScript语言主要考虑它更加成熟、速度快、性能好、开发人数也很多。其特有闭包和第一类函数。

node.js 服务器开发原因
  • 非阻塞模式的IO处理,在高并发情况下可以很好处理资源耗尽问题。

  • 事件驱动、异步编程,为网络服务而设计。JavaScript 匿名函数和闭包特性适合异步编程。

  • 轻量、简单开发配置。

  • 闭包:函数可以继承并访问自身被声明的那个作用域的变量。

      var clickCount = 0;
      document.getElementById('Button').onclick = function(){
          clickCount +=1;  //匿名函数 function 可以访问clickCount 变量
      };
    
  • 第一类函数:函数是第一类对象,可以将函数作为参数传递给其他函数

node.js 安装配置
  • 下载,根据自己需求选择Window or Mac。
  • 安装,Windows 下载node-v4.3.1-x64.msi ,点击安装,Run->next->Finish。
  • Window 下普通安装不需要环境变量配置,因为node.exe文件安装到C:\Program Files (x86)\nodejs\目录下,并将该目录添加进PATH环境变量。
  • 检测:node -v ,出现:v4.3.1 (版本号不固定)
node.js 重点概念解析
  • 路由:HTTP 衍生的方法之一,添加在Express 实例中。对应的方法包括get、post、put、head 等

      在根路由 (/) 上(应用程序的主页)对 POST 请求进行响应:
      app.post('/', function (req, res) {
        res.send('Got a POST request');
      });
    
      对 /user 路由的 PUT 请求进行响应:
      app.put('/user', function (req, res) {
        res.send('Got a PUT request at /user');
      });
    
  • Express 是基于Node js 流行的Web框架,迅速化搭建网站,特别是记住WebStorm 迅速开发。具体查看

  • Npm 安装本地且保存到package.json 文件中:npm install --save-dev serve-static

  • ...

node.js 入门开发
  • 文件读取, Node.js 文件系统(fs 模块)模块中的方法均有异步和同步版本,例如读取文件内容的函数有异步的 fs.readFile() 和同步的 fs.readFileSync()。异步的方法函数最后一个参数为回调函数,回调函数的第一个参数包含了错误信息(error)。

      //----文件读取封装类----- 新建js 文件命名localfile.js,添加如下代码:
    
      var rf = require('fs');
      function getfile(_filename,callback){
         rf.readFile('./data/'+_filename,'utf-8',function(err,data){
             if(err){
                 callback(err);//callback 也是JavaScript 语言特别常用的回调方式。
             }else{
                 callback(data);
             }
         })
      }
      module.exports.getfile = getfile;//Node.js 通过module.exports向外部导出getfile 方法,提供外部调用。
    
      //----文件读取使用类-----在index.js 添加调用:
    
      var reader = require('../models/localfile');
      var router = express.Router();
      router.use('/config.html?',function(req,res){
         reader.getfile('config.html',function(result){
           res.send(result);
         });
      });
      module.exports = router;
       
      //简单的例子,通过请求 XXXXXX/config.html? 接口返回 本地 config.html 的文件
    
  • 网络请求,Node.js 标准库提供了 http 模块,其中封装了一个高效的 HTTP 服务器和一个简易的HTTP 客户端。但是我推荐一个 request 库,当然需要你npm install request 并且保证package.json 中添加 "request": "^2.69.0"。

      //request 回调函数返回三个参数,error 、response、body   
      var request = require('request');
      function getrequest(_url,callback){
          request(_url, function (error, response, body) {
              if (!error && response.statusCode == 200) {
                  callback(body);
                  console.log(body)
              }
          })
      }
      module.exports.getrequest = getrequest;
    
  • 数据库连接,以mongodb 数据库为连接对象,推荐使用 mongoose 库,npm install mongooose并且保证package.json 中添加 "mongooose":"^4.4.17"。代码查看,重点关注内容:

      一,数据配置文件:config.js、mongoose.js,
    
      1,首先创建一个文件命名为config.js ,添加代码:
    
       module.exports = {
           mongodb :"mongodb://localhost/mobile" //数据库连接url ,有必要可以添加用户名、密码的信息。
      };
    
      2,同名目录下创建文件命名mongoose.js ,添加代码
    
      var mongoose = require('mongoose');
      var config = require('./config');
    
      module.exports = function(){
      var db = mongoose.connect(config.mongodb);//数据库连接
      require('../models/mongodb/config.server.models.js');//mongodb 是按文件存储,存储需要一定的模型,字段名称和类型,在此处加载
      return db;
      }
    
      二,封装文件:config.server.models.js、dbhelper.js
    
      1,创建mongodb 存储模型将数据集合映射到数据库中,例如配置模型config,包含字段:title、type、time 。
    
      var mongoose = require('mongoose');
    
      var configSchema  = new mongoose.Schema({
          title:String,
          type:String,
          time:Date
      });
    
      mongoose.model('Config', configSchema);
    
      2,创建外部封装模块:
    
      var mongoose = require('mongoose');
      var Config = mongoose.model('Config');
      function setConfig(req,callback){
          var config = new Config({
              title:'splash',
              type:'normal',
          });
          config.save(function(err){
              if (err) {
                  callback('保存失败');
                  return;
              }
              callback('保存成功');
              return;
          })
      }
    
      module.exports.setConfig = setConfig;
    
      三,app.js 全局申明:
    
      var mongoose = require('./config/mongoose');//指向上文创建的mongoose 文件
      var db = mongoose();
    

未完待续。。。