在Mac OS下使用Node.js的简单教程

这里有一篇很好的 Node.js 介绍文章 great nodejs intro,它将给你一个非常方便的介绍 Node.js 和 CouchDB,并给出一个实例实现 REST 的服务用于执行书签的 CRUD 操作,使用 CouchDB 作为数据库。

本文将介绍在 Mac OS X 下安装并开始使用 Node.js ,这个过程大概需要 30 分钟左右的时间,其中我们还将安装 CouchDB,并实现基于 CouchDB 的 REST API。

本文假设你机器上已经装有Git,如果还没有,请参考此文进行安装。

安装 node.js 和 npm

最简单的方法是在 node.js 的官网上通过 the nodejs download section页面并选择 Mac 下的安装程序,它将在你的机器上安装 Node.js 和 npm (node package manager). 
 安装成功后你就可以使用 node 和 npm 命令了。

安装 CouchDB

因为本文需要使用 CouchDB 来存储对象,因此还需要安装 CouchDB.

安装 CouchDB 稍微麻烦一些,因为我们需要下载源码然后编译I,在此之前需要先安装 Homebrew ,请执行以下命令:

git clone https://github.com/mxcl/homebrew.git
cd homebrew/bin
brew install autoconf automake libtool
brew install couchdb

重要的提示:CouchDB 之前报出一个问题可能会阻止你安装,要修复这个问题需要手工编辑 ~/couch/homebrew/Library/Formula/couchdb.rb 文件,编辑内容如下:

代码如下:

require 'formula'
 
class Couchdb < Formula
  url 'http://www.apache.org/dyn/closer.cgi?path=couchdb/source/1.1.1/apache-couchdb-1.1.1.tar.gz'
  homepage "http://couchdb.apache.org/"
  md5 'cd126219b9cb69a4c521abd6960807a6'

请注意需要将 url 中的 source 删除,最终修改结果如下:

代码如下:

require 'formula'
 
class Couchdb < Formula
  url 'http://www.apache.org/dyn/closer.cgi?path=couchdb/1.1.1/apache-couchdb-1.1.1.tar.gz'
  homepage "http://couchdb.apache.org/"
  md5 'cd126219b9cb69a4c521abd6960807a6'

如果安装过程被挂起了,你需要 CTRL-C 终止并执行下面命令重试:

代码如下:

./brew install -v couchdb

更多关于 Mac OS X 上安装 CouchDB 的信息请阅读 "Installing CouchDB on OSX".

一旦 CouchDB 编译完成,我们可以手工执行 ./couchdb 来启动它,你可以在浏览器中打开 http://127.0.0.1:5984/_utils 这个地址以验证 CouchDB 安装是否成功。

 下载教程

现在所需的软件都已经安装完成,我们接下来继续 Node.js 的介绍实例。

首先我们使用 Git 来获取实例源码
 
git clone https://github.com/indexzero/nodejs-intro.git
创建 CouchDB 数据库
在开始教程之前我们需要创建一个 CouchDB 数据库,先确保 CouchDB 已经启动,然后使用如下命令创建数据库:
 
$ curl -X PUT http://127.0.0.1:5984/pinpoint-dev10
{"ok":true}

你可以在浏览器中访问 http://127.0.0.1:5984/_utils 就可以看到新创建的数据库。

这里还有一个非常棒的 CouchDB 的指南。

开始教程

node js 实例使用模块化的方式构建,lib 目录包含很多模块,而服务器脚本在 bin 目录下。

例如,我们要启动 CouchDB 教程,可以在 bin 目录下执行下面命令:
 
./server -t 02couchdb -s

其中 -t 参数允许你指定要执行的 lib 目录下的模块,-s 参数用以设置我们刚建立的 pinpoint-dev 数据库。

sys - util 变化

根据 Node.js 的版本不同,你可能会看到如下的错误或者是警告:

代码如下:

$ node -v
v0.7.7-pre
 
$ ./server -t 02couchdb -s
 
node.js:247
        throw e; // process.nextTick error, or 'error' event on first tick
              ^
Error: The "sys" module is now called "util".
    at sys.js:1:69
    at NativeModule.compile (node.js:572:5)
    at Function.require (node.js:540:18)
    at Function._load (module.js:297:25)
    at Module.require (module.js:357:17)
    at require (module.js:373:17)
    at Object. (/home/ubuntu/nodejs-intro/bin/server:3:11)
    at Module._compile (module.js:444:26)
    at Object..js (module.js:462:10)
    at Module.load (module.js:351:32)

为了避免这个问题,你需要将所有调用 `require("sys")` 替换成 `require("util")`

Node v0.6.14 不会抛出错误信息,但会提示警告:

代码如下:

$ node -v
v0.6.14
 
$ ./server -t 02couchdb -s
The "sys" module is now called "util". It should have a similar interface.
Pinpoint demo server listening for 02couchdb on http://127.0.0.1:8000

运行教程

当你运行某个教程时,会提示一些错误:

代码如下:

$ ./server 02couchdb
The "sys" module is now called "util". It should have a similar interface.
 
node.js:201
        throw e; // process.nextTick error, or 'error' event on first tick
              ^
Error: Cannot find module 'optimist'
    at Function._resolveFilename (module.js:332:11)
    at Function._load (module.js:279:25)
    at Module.require (module.js:354:17)
    at require (module.js:370:17)
    at Object. (/Users/ddewaele/Projects/Node/nodejs-intro/bin/server:5:12)
    at Module._compile (module.js:441:26)
    at Object..js (module.js:459:10)
    at Module.load (module.js:348:31)
    at Function._load (module.js:308:12)
    at Array.0 (module.js:479:10)

该教程包含很多依赖,我们需要使用 npm 来下载这些依赖的包。
 
安装 node 包

Node packages (dependencies) 可通过 npm 命令来安装,例如:

$ npm install optimist
npm http GET https://registry.npmjs.org/optimist
npm http 200 https://registry.npmjs.org/optimist
npm http GET https://registry.npmjs.org/optimist/-/optimist-0.2.8.tgz
npm http 200 https://registry.npmjs.org/optimist/-/optimist-0.2.8.tgz
npm http GET https://registry.npmjs.org/wordwrap
npm http 200 https://registry.npmjs.org/wordwrap
npm http GET https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz
npm http 200 https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz
optimist@0.2.8 ../node_modules/optimist
└── wordwrap@0.0.2

这些包将被安装到 node_modules 文件夹中:

$ ls -l ../node_modules/
total 0
drwxr-xr-x 10 ddewaele staff 340 Apr 1 18:54 optimist

本文需要安装如下的 node 包:

npm install winston
npm install cradle
npm install journey
npm install optimist

运行教程

进入 bin 目录,通过下面命令来运行教程:

$ ./server -t 02couchdb -s
The "sys" module is now called "util". It should have a similar interface.
Pinpoint demo server listening for 02couchdb on http://127.0.0.1:8000

然后打开浏览器访问 http://127.0.0.1:8000/bookmarks ,将会看到如下的结果:

代码如下:

{"bookmarks":[]}

这表示服务已经启动并运行,为了在 CouchDB 中添加点测试数据,我们可以使用 http-console 控制台来访问 CouchDB 的 REST 服务。

安装 http-console

有一个非常棒的工具可以帮助你调试服务,该工具名为 http-console ,你可使用 npm 来安装:

sudo npm install -g http-console

然后就可以在命令行中执行该工具,不幸的是当我们执行该命令时报错了:

$ http-console

node.js:201
    throw e; // process.nextTick error, or 'error' event on first tick
       ^
Error: require.paths is removed. Use node_modules folders, or the NODE_PATH environment variable instead.
  at Function. (module.js:378:11)
  at Object. (/usr/local/lib/node_modules/http-console/bin/http-console:6:8)
  at Module._compile (module.js:441:26)
  at Object..js (module.js:459:10)
  at Module.load (module.js:348:31)
  at Function._load (module.js:308:12)
  at Array.0 (module.js:479:10)
  at EventEmitter._tickCallback (node.js:192:40)

很麻烦,我们还需要手工编辑 /usr/local/lib/node_modules/http-console/bin/http-console 文件,然后删除下面这一行:

代码如下:

require.paths.unshift(path.join(__dirname, '..', 'lib'));

现在 http-console 就可以启动了,无需任何参数,它将连接到 http://localhost:8080 ,如果你需要指定服务器和端口,把它作为第一个参数传递给 http-console 即可。

请注意我们这里使用了 \json 命令用来设置正确的 content-type:

$ http-console http://127.0.0.1:8000
The "sys" module is now called "util". It should have a similar interface.
> http-console 0.6.1
> Welcome, enter .help if you're lost.
> Connecting to 127.0.0.1 on port 8000.

http://127.0.0.1:8000/> \json
http://127.0.0.1:8000/>

访问 REST 服务

在 http-console 中,要执行 GET 请求只需要输入 GET /bookmarks 即可:

http://127.0.0.1:8000/> GET /bookmarks
HTTP/1.1 200 OK
Date: Sun, 01 Apr 2012 17:23:27 GMT
Server: journey/0.4.0
Content-Type: application/json;charset=utf-8
Content-Length: 16
Connection: keep-alive

{
  bookmarks: []
}

你也可以使用 JSON 的片段来执行 POST 请求:

http://127.0.0.1:8000/> POST /bookmarks
... { "url": "http://nodejs.org" }
HTTP/1.1 200 OK
Date: Thu, 05 Apr 2012 11:45:55 GMT
Server: journey/0.4.0
Content-Type: application/json;charset=utf-8
Content-Length: 91
Connection: keep-alive

{
  bookmark: {
    _id: 'WD-G-1',
    resource: 'Bookmark',
    url: 'http://nodejs.org'
  }
}

然后再次执行 GET 请求,你就可以看到新插入的数据了:

http://127.0.0.1:8000/> GET /bookmarks
HTTP/1.1 200 OK
Date: Sun, 01 Apr 2012 17:23:27 GMT
Server: journey/0.4.0
Content-Type: application/json;charset=utf-8
Content-Length: 16
Connection: keep-alive

{
  bookmarks: [
    {
      _rev: '1-cfced13a45a068e95daa04beff562360',
      _id: 'WD-G-1',
      resource: 'Bookmark',
      url: 'http://nodejs.org'
    }
  ]
}
时间: 2015-06-21

Mac/Windows下如何安装Node.js

Mac 在Mac下,如果你喜欢用homebrew,那么只用一行就可以装好: brew install node 否则,只能考虑手工安装了,步骤如下: 安装Xcode 安装git 运行下面的命令行编译node.js 复制代码 代码如下: git clone git://github.com/ry/node.git cd node ./configure make sudo make install Ubuntu 安装依赖包 sudo apt-get install g++ curl libssl-

mac上node.js环境的安装测试

如果大家之前做过web服务器的人都知道,nginx+lua与现在流行的Node.js都是可以做web服务器的,前者在程序的写法和配置上要比后者麻烦,但用起来都是差不多.在这里建议大家如果对lua脚本语言不了解,可以多了解这门脚本语言,他号称是所有脚本语言执行效率是最高的一门脚本语言.底层是基于C语言的,非常好用,跨平台! 下面我就来给大家配置一下node.js环境. 二 mac node.js环境的配置 第一步:打开终端,输入以下命令安装Homebrew ruby -e "$(curl -fsS

mac下的nodejs环境安装的步骤

说明 我们以brew的方式进行安装. node安装 #我们安装时要附加参数,因为在新版中,默认的安装参数不会安装npm包管理器. brew install node --with-npm #检查安装是否成功 ➜ node -v v6.0.0 ➜ npm -v 3.8.6 使用淘宝的npm源 #淘宝提供了多种使用方式,这里我使用别名的方式, echo '\n#alias for cnpm\nalias cnpm="npm --registry=https://registry.npm.taobao

在Mac OS上安装使用Node.js的项目自动化构建工具Gulp

安装 node.js 首先需要安装 node.js, 通常情况下,只需要到 Node.js 官网下载安装包安装就可以了.不过我可耻的失败了,弹出了如下错误: 于是我换成了 brew 大法: brew install nodejs 安装 Gulp gulp 使用 Node.js 的 npm 命令安装: npm install --global gulp 然后在项目目录中还要安装一遍: npm install --save-dev gulp 我对这步的操作比较费解.以我多年码农经验,即然全局安装过了

利用n 升级工具升级Node.js版本及在mac环境下的坑

一.利用n 升级Node.js 最近在用NPM安装一个nodejs工具时发现,我的nodejs的版本有些旧了.这不是大问题,只要升级就可以了,当然,重新从nodejs.org最新版本是一种方法,但我想应该有更简单的方法,那就是使用 n 这个工具包,我们可以使用NPM先安装 n 工具包,然后用它升级nodejs,十分的方便. sudo npm cache clean -f sudo npm install -g n sudo n stable 上面这是使用 n 来安装最新的稳定版的nodejs.

利用Chrome DevTools直接调试Node.js和JavaScript的方法详解(并行)

前提 Node.js 6.3+, 这个可上Node.js官网自行下载: Chrome 55+. 如果您本地的chrome升级到最新版后还是<55, 可以从此处下载:Chrome Canary,亲测可行. 配置 就目前来说,在浏览器端并行调试JavaScript与Node.js还属于新特性,新体验.为了能够正常使用,你还需要做如下配置: 1.输入url:chrome://flags/#enable-devtools-experiments. 注:如果使用中文版Chrome,显示的配置项名称应该为:

利用forever和pm2部署node.js项目过程

本文主要给大家分享的是利用forever和pm2部署node.js项目过程的相关内容,分享出来供大家参考学习,下面来看看详细的介绍: 一.forever forever可以在cmd或ssh连接断开时,让项目一直运行,而且可以在项目崩溃时自动重启 安装 npm install -g forever forever的帮助手册 forever --help 使用forever启动项目 forever start app.js 使用forever停止项目 forever stop app.js 列出所有

利用Nginx实现反向代理Node.js的方法详解

前言 公司有项目前端是用node.js进行服务器渲染,然后再返回给浏览器,进而解决单页面的SEO问题.项目部署的时候,使用Nginx反向代理Node.js.具体的步骤如下: (Nginx.Node.js的安装和基本配置直接跳过) 首先我们要在nginx.cnf文件中的http节点打开下面的配置: http { log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_by

利用NPM淘宝的node.js镜像加速nvm

NVM 加速 安装 Node.js 一般都是用 nvm 但是安装之后使用体验就不咋地了,由于某些不可变原因,国内网络就不好吐槽了:就连执行一下 nvm ls-remote 都要很久. 当然"道"高一尺"魔"高一丈,聪明的国人肯定也想出了对应的解决方案,就是建立了各种各样的镜像:比如淘宝源 淘宝 NPM 镜像 所以加速 nvm 的方法就是使用 NPM 淘宝的 node.js 镜像. 临时方案: 在运行 nvm 命令之前执行设置一个变量的命令 NVM_NODEJS_OR

跟我学Nodejs(一)--- Node.js简介及安装开发环境

学习资料 1.深入浅出Node.js 2.Node.js开发指南 简介(只捡了我觉得重要的) Node.js是让Javascript脱离浏览器运行在服务器的一个平台,不是语言: Node.js采用的Javascript引擎是来自Google Chrome的V8:运行在浏览器外不用考虑头疼的Javascript兼容性问题 采用单线程.异步IO与事件驱动的设计来实现高并发(异步事件也在一定程度上增加了开发和调试的难度): Node.js内建一个HTTP服务器,所以对于网站开发来说是一个好消息:  

详解使用Typescript开发node.js项目(简单的环境配置)

最近在学习typescript的过程中,想到也许可以使用ts来开发node.js项目.在网上搜了一下,其实已经有很多开发者实践了这方面的内容.这里,我记录一下自己搭建开发环境的简单过程. 使用Typescript开发的好处: 较严格的类型检查和语法检查. 对ES6/ES2015/ES7(部分)支持比较好. 编译后的js文件很干净,也支持多种代码规范. 其他,请参见文档. 准备 node.js v6.9.1 或者任意的新版本,老版本暂时没有试验. tsc typescript编译器,使用npm安装

利用pm2部署多个node.js项目的配置教程

前言 相信大家应该都知道,一般在实际项目部署中,我们服务器在启动的时候需要自动启动node服务.以前是通过liunx自带的命令启动.但是随着后台微服务越来越多.每次发布新程序.修改脚本太麻烦了.于是换成PM2来做.下面话不多说了,来一起看看详细的实现过程吧. 配置方法如下: 1.首先安装pm2 npm install -g pm2 2.生成配置文件 pm2 ecosystem 生成完成会有一个ecosystem.config.js的文件, 3.修改配置文件 编辑ecosystem.config.

利用n工具轻松管理Node.js的版本

前言 相信对于学习Node.js的小伙伴们都知道,现在 Node 的版本更新很快,目前最新稳定版已经更新到 v7.6.0 了,而生产环境一般选择使用 LTS(Long-term Support)版本,目前最新的是 v6.10.0. LTS本地下载:点击这里 新版的 Node 7.x.x 有非常有用的更新,那就是支持了 --harmony-async-await.这样就不用依赖 babel 来使用 async/await 特性了. 但是,如何让 7.x.x 和 LTS 的 6.x.x 并存呢?就需

利用nvm管理多个版本的node.js与npm详解

前言 Nvm 管理不同版本的 node 与 npm nvm 是 NodeJS 的多版本管理工具,有点类似管理 Ruby 的 rvm,如果是需要管理 Windows 下的 node,官方推荐是使用 nvmw 或 nvm-windows . 卸载已安装的全局 node/npm 在官网下载的 node 安装包,运行后会自动安装在全局目录,其中node 命令在 /usr/bin/node ,npm 命令在全局 node_modules 目录中,具体路径为 /usr/lib[lib64]/node_mod