Node.js 尝鲜笔记

Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。Node.js 使用了一个事件驱动、非阻塞式 I/O 的模型,使其轻量又高效。Node.js 的包管理器 npm 是全球最大的开源生态系统。
Node.js 中文网

如果我们使用 PHP 来编写后端的代码时,需要 Apache 或者 Nginx 的 HTTP 服务器,并配上 mod_php5 模块和 php-cgi。
从这个角度看,整个“接收 HTTP 请求并提供 Web 页面”的需求根本不需要 PHP 来处理。
不过对 Node.js 来说,概念完全不一样了。使用 Node.js 时,我们不仅仅在实现一个应用,同时还实现了整个 HTTP 服务器。事实上,我们的 Web 应用以及对应的 Web 服务器基本上是一样的。
菜鸟教程

下面记录了在 Windows 和 Ubuntu 中使用 Node.js 的笔记。
(笔者的系统环境为 Windows 10 64位,Ubuntu 14.4 64位)

安装

Node.js 中文网目前提供了两个版本——v4.4.4 的长期支持版本和 v6.2.0 的最新稳定版本。笔者选择了 v6.2.0
Node.js 官网目前提供的版本是 v6.9.2 LTSv7.3.0 Current

Windows

对于 Windows,有 .msi.exe 两种安装方式。下载 .exe,放在 D:\Nodejs\\ 目录。
(此处注意一点,为了方便使用命令 node,尽量不要修改文件名 node.exe。如果选择 .msi 安装方式则无此顾虑。)
配置环境变量
D:\Nodejs 添加到 PATH
检查

node -v

输出如

v6.2.0

安装 npm
GitHub 下载 npm 源码 npm-4.0.5.zip,解压到 D:\Nodejs\\,安装

D:\>cd Nodejs\npm-4.0.5
D:\Nodejs\npm-4.0.5\>node cli.js install -gf

配置环境变量
D:\Nodejs\node_modules 添加到 NODE_PATH
检查

npm -v

输出如

4.0.5
Ubuntu

对于 Ubuntu,也有多种安装方式。

  • 其一,直接从仓库安装
apt-get install nodejs
apt-get install npm

检查

nodejs -v
npm -v

输出如

v0.10.25
1.3.10
  • 其二,下载编译好的版本
wget 'https://nodejs.org/dist/v6.2.0/node-v6.2.0-linux-x64.tar.gz'
tar zxvf node-v6.2.0-linux-x64.tar.gz -C /opt

(该版本已自带 npm
配置环境变量 /etc/profile

# Set Node.js environment
export NODE_HOME=/opt/node-v6.2.0-linux-x64
export NODE_PATH=${NODE_HOME}/lib/node_modules
export PATH=${PATH}:${NODE_HOME}/bin
source /etc/profile

检查

node -v
npm -v

输出如

v6.2.0
3.8.9
  • 其三,编译源码
    略。

可见第一种方式最简单,但缺点就是版本老旧;第二种方式可以使用较新的版本;第三种方式待笔者进阶再做尝试。此处笔者选择了第二种方式以继续。

如果选择第一种方式,可能需要对命令做一个链接,因为其他地方会用到node命令而不是nodejs

ln -s /usr/bin/nodejs /usr/bin/node

测试

编写 HelloWorld 应用 hello.js

// 使用 require 指令来载入 http 模块,并将实例化的 HTTP 赋值给变量 http
var http = require('http');

http.createServer(function(request, response) {
  // 发送 HTTP 头部
  response.writeHead(200, {'Content-Type': 'text/plain'});
  // 发送相应数据
  response.end('Hello, world!');
}).listen(8888);

// 终端打印以表示启动成功
console.log('Server running at http://localhost:8888/');

运行

node hello.js

浏览器访问 http://localhost:8888/,出现 Hello, world!,成功。

应用

在 Ubuntu 上部署 App 版本检查更新服务。

cd /opt/node-v6.2.0-linux-x64
mkdir SchTtableAppVerCheck
cd SchTtableAppVerCheck

安装 Express 框架

Express 是一个简洁而灵活的 Node.js Web 应用框架,提供了一系列强大特性帮助你创建各种 Web 应用和丰富的 HTTP 工具。
Node.js 中文网

npm install express -g

* 几个附加重要模块

npm install body-parser -g
npm install cookie-parser -g
npm install multer -g

-g 全局安装)
* npmjs.org 官方可能访问较慢,可以使用淘宝 NPM 镜像,页面有操作方法,不再赘述。
编写应用 app.js

var express = require('express');
var app = express();

// 文件读写模块
var fs = require('fs');

app.get('/SchTtable/appversion.do', function(req, res) {
  var data;
  try {
    // 读取 .js 代码文件所在目录的 .json 数据文件
    data = fs.readFileSync(__dirname + '/appversion.json', 'utf-8');
    // 检查格式
    data = JSON.parse(data);
  } catch (err) {
    data = {};
    console.log(err);
  }
  res.jsonp(data);
});

var server = app.listen(8080, function() {
  var host = server.address().address;
  var port = server.address().port;

  console.log("http://%s:%s", host, port);
});

console.log('SchTtableAppVerCheck is running.');

完成后 ls 检查

app.js  appversion.json  node_modules

运行

node app.js
如何后台运行?

有两种方法,其一 nohup 开进程;其二 forever 模块管理。笔者采用第二种方法。
安装 forever 模块

npm install forever -g

运行

forever start app.js

检查

forever list

停止

forever stop app.js

更多用法参考 foreverjs / forever

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342

推荐阅读更多精彩内容

  • Node.js是目前非常火热的技术,但是它的诞生经历却很奇特。 众所周知,在Netscape设计出JavaScri...
    Myselfyan阅读 4,062评论 2 58
  • Node.js是目前非常火热的技术,但是它的诞生经历却很奇特。 众所周知,在Netscape设计出JavaScri...
    w_zhuan阅读 3,607评论 2 41
  • 1 Node.js安装与配置 1.1 Windows平台下的Node.js安装 在过去,Node.js一直不支持在...
    七寸知架构阅读 3,935评论 0 50
  • 除了妹妹,我没有和别人一起洗过澡,就连上大学的时候,都巧妙地避开了舍友,从不曾坦诚相见。所以,我没有七月和安生。 ...
    你看今已亭亭如盖阅读 261评论 0 0
  • 入秋了,又到了健身、锻炼的好时机了。今天下午出门,外面风和日丽,人行道上夏天多了许多身穿运动装,手拿篮球的男生,而...
    霸蛮侠阅读 215评论 0 0