在Mac OS下使用Node.js的簡單教程_node.js

來源:互聯網
上載者:User

這裡有一篇很好的 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.gitcd homebrew/binbrew install autoconf automake libtoolbrew 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 optimistnpm http GET https://registry.npmjs.org/optimistnpm http 200 https://registry.npmjs.org/optimistnpm http GET https://registry.npmjs.org/optimist/-/optimist-0.2.8.tgznpm http 200 https://registry.npmjs.org/optimist/-/optimist-0.2.8.tgznpm http GET https://registry.npmjs.org/wordwrapnpm http 200 https://registry.npmjs.org/wordwrapnpm http GET https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgznpm http 200 https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgzoptimist@0.2.8 ../node_modules/optimist└── wordwrap@0.0.2


這些包將被安裝到 node_modules 檔案夾中:
 

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


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

npm install winstonnpm install cradlenpm install journeynpm install optimist

運行教程

進入 bin 目錄,通過下面命令來運行教程:
 

$ ./server -t 02couchdb -sThe "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:8000The "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/> \jsonhttp://127.0.0.1:8000/>

訪問 REST 服務

在 http-console 中,要執行 GET 請求只需要輸入 GET /bookmarks 即可:
 

http://127.0.0.1:8000/> GET /bookmarksHTTP/1.1 200 OKDate: Sun, 01 Apr 2012 17:23:27 GMTServer: journey/0.4.0Content-Type: application/json;charset=utf-8Content-Length: 16Connection: keep-alive {  bookmarks: []}


你也可以使用 JSON 的片段來執行 POST 請求:
 

http://127.0.0.1:8000/> POST /bookmarks... { "url": "http://nodejs.org" }HTTP/1.1 200 OKDate: Thu, 05 Apr 2012 11:45:55 GMTServer: journey/0.4.0Content-Type: application/json;charset=utf-8Content-Length: 91Connection: keep-alive {  bookmark: {    _id: 'WD-G-1',    resource: 'Bookmark',    url: 'http://nodejs.org'  }}


然後再次執行 GET 請求,你就可以看到新插入的資料了:
 

http://127.0.0.1:8000/> GET /bookmarksHTTP/1.1 200 OKDate: Sun, 01 Apr 2012 17:23:27 GMTServer: journey/0.4.0Content-Type: application/json;charset=utf-8Content-Length: 16Connection: keep-alive {  bookmarks: [    {      _rev: '1-cfced13a45a068e95daa04beff562360',      _id: 'WD-G-1',      resource: 'Bookmark',      url: 'http://nodejs.org'    }  ]}

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.