《了不起的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报错

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