Node.js学习入门手册

Node.js 安装

1.下载http://nodejs.org/dist/v0.12.1/node-v0.12.1-x86.msi并完成安装
2.下载https://www.python.org/ftp/python/2.7.9/python-2.7.9.msi并完成安装
3.打开CMD,依次输入命令:node –v 及 python,查询node.js 与 python 版本号
这里写图片描述

Node.js IDE 安装

4.下载http://download-cf.jetbrains.com/webstorm/WebStorm-9.0.3.exe并完成安装
这里写图片描述
关于Node.js介绍,我们引用官网( http://nodejs.org/ )的一段文字说明:
这里写图片描述
Google Chrome浏览器基于V8的,它是一个开源的JavaScript引擎,能够编译和执行JavaScript代码,在执行速度上有很大的优势。使用Node.js能够很容易地构建快速、可扩展的网络应程序,它使用了事件驱动、非阻塞I/O模型实现,具有轻量、高效的特点,适合于构建运行在分布地设备之上的数据密集型实时应用程序。
下面通过参考各种资料,从各个方面,概括地总结一下Node.js,是我们对Node.js有一个直观的了解:

• 使用JavaScript运行于服务端的平台上,自然继承了JavaScript语言的一些特性;
• Node.js基于单线程、基于非阻塞I/O模型实现;
• 适合于数据密集型应用,不适用于计算密集型类的应用(如算法等);
• 通过使用回调函数,来避免同步地等待I/O操作完成;
• Node.js非核心模块非常多,质量可能参差不齐(使用别人贡献的模块,要有承担风险的准备);
• 因为简单,开发Node.js应用程序效率很高;
• 调试相对困难,调试工具可能没有其他一些比较成熟的语言(如Java、C++等)的好用;
• Node.js基于事件驱动架构,events模块是Node.js最核心的模块。

我学习Node.js使用的工具及其环境配置,如下表所示:
这里写图片描述

Node包管理器(npm)

和Python等语言一样,在Node.js中可以使用npm来管理package,常用的命令,如下所示:
这里写图片描述

使用上面的命令可以方便地管理Node.js包。
node工具
使用node工具运行Node.js脚本非常容易,语法格式如下所示:

node [options] [ -e script | script.js ] [arguments]

有三种执行方式:
• 运行脚本
比如,运行脚本debug.js,执行如下命令即可:

node debug.js

• 运行代码
如果,想要直接在命令执行代码段,可以使用-e选项,例如:

node -e 'console.log("hello")';

其中-e选项后面是一个代码的字符串,他会转换成JavaScript代码在Node.js运行时环境执行,类似eval函数,将执行字符串中的代码。
• REPL模式运行
可以直接根据输入node命令,然后回车,根据前导提示符,输入命令执行,一般用来测试比较直观。
调试Node.js代码
可以使用Eclipse开发工具,安装Chrome Developer插件:
http://chromedevtools.googlecode.com/svn/update/dev/
这个是在线安装地址。
例如,我们在Eclipse中新建一个debug.js文件,代码如下所示:

// say hello example
var customer = 'shirdrn';
var f = function(name) {
     console.log('Hello, ' + name + '!');
}
f(customer);

然后,在Shell终端启动调试:

node --debug-brk=9222 /home/shirdrn/nodejs/debug.js

接着,可以在Eclipse中对debug.js的代码设置断点,执行Debug As => Debug Configurations => 选择Standalone V8 VM,创建一个调试配置,然后可以调试运行,在断点处查看变量的值。
编程实践
• 使用核心模块events
events模块是Node.js最核心的模块,通过使用该模块,可以了解Node.js的事件机制。下面代码是注册2个事件:一个是解析命令行传入参数的parseCommand事件,另一个是执行Shell命令的executeCommand事件。当脚本启动执行时,发射一个parseCommand事件,把命令行传递的参数传递给该事件函数,解析参数构造Linux下Shell命令行完成后,会发射一个executeCommand事件,去执行这个Shell命令。
实现代码,如下所示:

#!/usr/bin/env node
var process = require('process');
var taskShell =  require('task-shell');
var events = require('events');
var bash = '/bin/bash';
// create event emitter
var emitter = new events.EventEmitter();
// register event: 'parseCommand'
emitter.on('parseCommand', function(argv) {
  var shell = '';
  console.log('argv.length=' + argv.length);
  if(argv.length >= 2) {
    for(var i=2; i<argv.length; i++) {
      shell += ' ' + argv[i];
      console.log('shell=' + shell);
    }
  }
  console.log('Parsed shell cmd: ' + shell);
  // emit
  emitter.emit('executeCommand', shell);
});
//register event: 'executeCommand'
emitter.on('executeCommand', function(shellCmd) {
  console.log('Execute shell cmd: ' + shellCmd);
  if(shellCmd != '') {
    shellCmd = bash + ' ' + shellCmd;
    var shell = new taskShell();
    shell.run([], {command : shellCmd}, console);
    console.log('Shell cmd executed.');
  }
});
console.log('Passed cmd line: ' + process.argv);
emitter.emit('parseCommand', process.argv);

• 创建一个HTTP服务器

#!/usr/bin/env node
var port = 8080;
var host = '192.168.1.115';
console.log('Confiugre: host=' + host + ', port=' + port);
var http = require('http');
var server = http.createServer(function(req, res) {
  res.writeHead(200, {'Content-Type' : 'text/plain'});
  res.end('Welcome to our site!!!');
});
console.log('Server created: ' + server);
server.listen(port, host);

在运行前,首先要安装http模块:

npm install http

然后运行脚本(debughttp.js):

node debughttp.js

访问 http://192.168.1.115:8080/ ,可以看到响应的消息内容。
• 使用express框架创建HTTP服务器

#!/usr/bin/env node
var express = require('express');
var app = express();
app.use(function(req, res, next) {
  console.log('%s : %s', req.method, req.url);
  next();
});
app.use(function(req, res, next) {
     res.send(200, {'Response OK' : 'http://localhost:8080'});
});
app.listen(8080);

运行脚本,访问 http://192.168.1.115:8080/ ,可以看到响应的JSON格式数据内容。扩展一下,你可以写一个HTML表单,通过表单提交数据到上面的地址,然后在代码中通过req来接收参数数据,然后进行处理,最后响应请求。
• 文件读写

#!/usr/bin/env node
var fs = require('fs');
var file = '/etc/passwd';
var encoding = 'UTF-8';
fs.readFile(file, encoding, function(err, data) {
     if(err) {
          console.error(err);
     } else {
          console.log(data);
     }
});

• 使用socket.io、socket.io-client、process、util模块
下面实现的脚本,是一个服务端和客户端简单会话的逻辑,脚本名称为endpoint.js,首先需要安装socket.io、socket.io-client、process这三个模块。
下面代码执行,可以通过从命令传递选项参数,选择启动服务器,还是连接到服务器,代码实现如下所示:

#!/usr/bin/env node
var port = 8080;
var host = '192.168.1.115';
var util = require('util');
var startServer = function() {
  var http = require('http');
  var server = http.Server();
  var io = require('socket.io')(server);
  io.on('connection', function(socket) {
    console.log('Connected!');
    // emit version infomation
    socket.emit('welcome', {'version' : '3.5.2', 'token' : '32jfds456FDSOwewA219bMqx4lPsz2'});
    socket.on('report', function(data) {
      console.log('Reported data: ' + util.inspect(data));
      // do something
      console.log('Computed!');
    });
    socket.on('close', function() {
      console.log('Closed!');
    });
  });
  console.log('Start server.');
  server.listen(port, host);
};
var startClient = function() {
  var client = require('socket.io-client');
  var socket = client('http://' + host + ":" + port);
  socket.on('welcome', function(data){
    console.log('Get welcome info from server: ' + util.inspect(data));
    var version = data['version'];
    var token = data['token'];
    console.log('version=' + version + ', token=' + token);
    // do something
    var reportData = {'alive' : ['node-01', 'node-06', 'node-03'], 'dead' : ['node-8']};
    console.log('Report data: ' + util.inspect(reportData));
    socket.emit('report', reportData);
    socket.emit('close');
  });
};
var process = require('process');
var argv = process.argv;
console.log('Passed arguments: ' + argv);
var option = argv[2];
if('server' == option) {
  startServer();
} else if('client' == option) {
  startClient();
} else {
  console.error('Unknown augment: ' + option + '!');
}

启动服务器,执行如下命令行:

node endpoint.js server

启动连接服务器,执行如下命令行:

node endpoint.js client

• 使用mysql模块连接MySQL数据库
首先要安装mysql、dateformat(格式化日期)模块:

npm install mysql
npm install dateformat

下面是使用Node.js操作MySQL的代码实现:

#!/usr/bin/env node
var mysql = require('mysql');
var util = require('util');
var dateFormat = require('dateformat');

var config = {
    'host' : '192.168.1.105',
    'port' : '3306',
    'user' : 'shirdrn',
    'password' : 'shiyanjun'
};
var connect = function() {
  var connection = mysql.createConnection(config);
  if(connection) {
    console.log('Succeed to connected: ' + util.inspect(connection));
  } else {
    throw new Error('Fail to connect MySQL database!');
  }
  return connection;
}

var query = function(sql, callback) {
  // connect to MySQL
  try {
    var connection = connect();
  } catch(err) {
    console.error(util.inspect(err));
    throw err;
  }
  // execute SQL queries
  connection.query(sql, callback);
  connection.end();
  console.log('Connection closed!');
}

// query example
var querySQL = 'SELECT id, host, port, updated_at FROM domain_db.traffic_proxy LIMIT 0,10';

query(querySQL, function(err, rows, fields) {
  if(err) {
    throw err;
  }
  for(var i=0; i<rows.length; i++) {
    var row = rows[i];
    var host = row['host'];
    var port = row['port'];
    var updatedAt = dateFormat(row['updated_at'], 'yyyy-MM-dd hh:mm:ss');
    console.log('Record: host=' + host + ', port=' + port + ', updatedAt=' + updatedAt);
  }
});

上面代码,从MySQL数据库中的一个表中查询数据,然后打印出来。
想进一步深入理解Node.js,可以参考相关文档,主要包括Node.js提供的一些特性,如继承(还有JavaScript具有的一些特性)。Node.js还有很多的模块,通过学习来开发自己Node.js应用程序。

参考链接
https://nodejs.org/
https://cnodejs.org/
http://nodeapi.ucdok.com/#/api/

  • 0
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值