nodejs学习分享

nodejs学习分享

nodejs安装配置

官方下载地址:https://nodejs.org/en/download/

命令安装

1.下载源码

在官方地址中下载SourceCode
或者
wget http://nodejs.org/dist/v0.10.24/node-v0.10.24.tar.gz
或者
git clone https://github.com/nodejs/node.git

2.解压源码

tar zxvf node-v0.10.24.tar.gz

3.编译安装

cd node-v0.10.24
./configure --prefix=/usr/local/node/0.10.24
make
make install

4.配置环境变量

vim /etc/profile

export NODE_HOME=源码包路径
export PATH=$NODE_HOME/bin:$PATH

source /etc/profile

验证是否安装成功

使用命令node -v

npm使用介绍

npm是一个包管理工具,类似于Java中的Maven;npmr入门文档见:https://www.npmjs.com.cn/getting-started/what-is-npm/

使用淘宝NPM镜像

同步频率目前为10分钟一次

npm install -g cnpm --registry=https://registry.npm.taobao.org

使用命令

cnpm install [name]

升级npm

npm install npm -g

cnpm install npm -g

基础语法

REPL

Node.js REPL(Read Eval Print Loop:交互式解释器) 表示一个电脑的环境,类似 Window 系统的终端或 Unix/Linux shell,我们可以在终端中输入命令,并接收系统的响应。

Node 自带了交互式解释器,可以执行以下任务:

  • 读取:读取用户输入,解析输入了Javascript 数据结构并存储在内存中。
  • 执行:执行输入的数据结构

  • 打印:输出结果

  • 循环:循环操作以上步骤直到用户两次按下 ctrl-c 按钮退出。

同步、异步请求

nodejs中的异步

nodejs中存在异步,但仅限于 I/O 和 Timer

var fs = require("fs");

fs.readFile('input.txt', function (err, data) {
    if (err) return console.error(err);
    console.log(data.toString());
});

console.log("程序执行结束!");

回调与异步的区别

在 javascript 中使用回调函数可所谓登峰造极,基本上所有的异步函数都会要求有一个回调函数,以至于写 javascript 写多了,看到回调函数的接口,都以为是异步的调用。

但是真相是回调函数,只是javascript 用来解决异步函数调用如何处理返回值这个问题的方法,或这样来说:异步函数调用如何处理返回值这个问题上,在系统的设计方面而言,有很多办法,而 nodejs 选择了 javascript 的传统方案,用回调函数来解决这个问题。

异步必带一个回调,而回调不一定是异步

js中的异步同步实例

事件循环

V8引擎为nodejs提供了异步执行回调接口

  • 在Node.js中有一个事件队列,每个任务都会放入事件队列中,都会留下处理结果的回调函数,事件循环线程处理事件队列中的任务,直到回调函数不再存在。
  • 在无阻塞的情况下,作为一个带有回调的函数被放入事件队列中,事件循环线程中被提取并执行。
  • 当执行过程中遇到I/O阻塞(读取文件、查询数据库、请求套接字、访问远程服务等)时,事件循环线程不会停下等待结果,转而继续执行队列中的下一个任务,不会在事件循环线程中执行。在函数执行时,Node.js在事件队列中放置回调函数,它的顺序根据函数的完成快慢决定。

nodejs学习分享_第1张图片

// 引入 events 模块
var events = require('events');
// 创建 eventEmitter 对象
var eventEmitter = new events.EventEmitter();
// 创建事件处理程序
var connectHandler = function connected() {
   console.log('连接成功。');
   // 触发 data_received 事件 
   eventEmitter.emit('data_received');
}
// 绑定 connection 事件处理程序
eventEmitter.on('connection', connectHandler);
// 使用匿名函数绑定 data_received 事件
eventEmitter.on('data_received', function(){
   console.log('数据接收成功。');
});
// 触发 connection 事件 
eventEmitter.emit('connection');
console.log("程序执行完毕。");

模块系统

直接引用其他js文件,并直接使用其中的方法

数据库连接

var mysql      = require('mysql');
var connection = mysql.createConnection({
    host     : 'localhost',
    user     : 'root',
    password : '123456',
    database : 'chat'
});

connection.connect();

connection.query('SELECT * from student', function (error, results, fields) {
    if (error) throw error;
    console.log(results);
});

你可能感兴趣的:(node.js)