《了不起的Node.js》chapter08 P108 基於connect創建一個靜態網站遇到的問題

了不起的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/,頁面正常顯示內容,如下:

mime.lookup報錯

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章