目標(biāo)
當(dāng)在瀏覽器中訪問 http://localhost:3000/?q=hjq 時(shí),輸出 alsotang 的 md5 值,即 a3873b4afab737de6523673f8e989841。
錯(cuò)誤端口占用
Error: listen EADDRINUSE :::3000
解決方法
查看線程:
netstat -anp tcp | grep 3000(端口號)
或者OSX "El Capitan"
lsof -i tcp:3000
殺線程:
kill -9 PID
建立 package.json 來管理 Node.js 項(xiàng)目
package.json 文件就是定義了項(xiàng)目的各種元信息,包括項(xiàng)目的名稱,git repo 的地址,作者等等。最重要的是,其中定義了我們項(xiàng)目的依賴,這樣這個(gè)項(xiàng)目在部署時(shí),我們就不必將 node_modules 目錄也上傳到服務(wù)器,服務(wù)器在拿到我們的項(xiàng)目時(shí),只需要執(zhí)行 npm install,則 npm 會(huì)自動(dòng)讀取 package.json 中的依賴并安裝在項(xiàng)目的 node_modules 下面,然后程序就可以在服務(wù)器上跑起來了.
生成package.json文件:
$ npm init
OK,這時(shí)會(huì)要求我們輸入一些信息,亂填就好了,反正這個(gè)地方也不用填依賴關(guān)系
這次的應(yīng)用,我們依賴 express 和 utility 兩個(gè)模塊。
$ npm install express utility --save
多了個(gè) --save 參數(shù),這個(gè)參數(shù)的作用,就是會(huì)在你安裝依賴的同時(shí),自動(dòng)把這些依賴寫入 package.json。
這時(shí)查看 node_modules 目錄,會(huì)發(fā)現(xiàn)有兩個(gè)文件夾,分別是 express 和 utility
$ ls -l node_modules/
app.js
eg:
var express = require('express');
var utility = require('utility');
var app = express();
app.get('/',function(req,res) {
// 從 req.query 中取出我們的 q 參數(shù)。
// 如果是 post 傳來的 body 數(shù)據(jù),則是在 req.body 里面,不過 express 默認(rèn)不處理 body 中的信息,需要引入 https://github.com/expressjs/body-parser 這個(gè)中間件才會(huì)處理,這個(gè)后面會(huì)講到。
// 如果分不清什么是 query,什么是 body 的話,那就需要補(bǔ)一下 http 的知識(shí)了
var q = req.query.q;
// 調(diào)用 utility.md5 方法,得到 md5 之后的值
// 之所以使用 utility 這個(gè)庫來生成 md5 值,其實(shí)只是習(xí)慣問題。每個(gè)人都有自己習(xí)慣的技術(shù)堆棧,
// 我剛?cè)肼毎⒗锏臅r(shí)候跟著蘇千和樸靈混,所以也混到了不少他們的技術(shù)堆棧,僅此而已。
// utility 的 github 地址:https://github.com/node-modules/utility
// 里面定義了很多常用且比較雜的輔助方法,可以去看看
var md5Value = utility.md5(q);
res.send(md5Value);
});
app.listen(3000, function (req, res) {
console.log('app is running at port 3000');
});