了不起的Node.js, P108,chapter08
一、初始代碼目錄結構及內容:
|-- package.json
|-- server.js
`-- website
|-- images
| |-- 1.jpg
| |-- 2.jpg
| |-- 3.jpg
| `-- 4.jpg
`-- index.html
// package.json
{
"name": "my-website",
"version": "0.0.1",
"dependencies": {
"connect": "^1.8.1"
}
}
"connect": "1.8.1"
改爲"connect": "^1.8.1"
// server.js
var connect = require('connect');
// Create server
var server = connect.createServer();
// Handle static files
server.use(connect.static(__dirname + '/website'));
// Listen
server.listen(3000);
// index.html
<h1>My website</h1>
<img src="/images/1.jpg">
<img src="/images/2.jpg">
<img src="/images/3.jpg">
<img src="/images/4.jpg">
圖片下載地址:
1.jpg
2.jpg
3.jpg
4.jpg
二、安裝模塊,運行代碼
npm install後目錄內容如下:
node server.js
,然後輸入地址http://127.0.0.1:3000/,頁面未正常顯示內容,命令窗口報錯:
$ node server.js
G:\dev\08-connect\introduction\connect\node_modules\connect\lib\middleware\static.js:144
type = mime.lookup(path);
^
TypeError: mime.lookup is not a function at G:\dev\08-connect\introduction\connect\node_modules\connect\lib\middleware\static.js:144:17
at FSReqWrap.oncomplete (fs.js:153:5)
上面顯示的是安裝依賴中的static.js中mime.lookup不是函數,報錯位置在144行
查詢後發現是mime版本變更的原因:
查詢static.js中lookup,我們將static.js中的所有lookup重命名爲getType即可(總共有兩處lookup)
修改後如下:
重新啓動server:node server.js
,打開地址http://127.0.0.1:3000/
頁面還是沒有顯示內容,命令窗口顯示’getType’未定義,如下:
$ node server.js
G:\dev\08-connect\introduction\connect2\node_modules\connect\lib\middleware\static.js:169
var charset = mime.charsets.getType(type);
^
TypeError: Cannot read property 'getType' of undefined
at G:\dev\08-connect\introduction\connect2\node_modules\connect\lib\middleware\static.js:169:35
at FSReqWrap.oncomplete (fs.js:153:5)
從代碼層面來看,getType是mime中的方法,我們去找依賴node_module中查找mime文件,查看mime.js中代碼內容,看是否有未定義getType。如下圖,我們發現getType是mime原型上的一個屬性,而不是mime.charsets上的一個屬性,所以我們將static.js中代碼var charset = mime.charsets.getType(type);
修改爲var charset = mime.getType(type);
然後重新運行node server.js
,再次輸入地址http://127.0.0.1:3000/,頁面正常顯示內容,如下: