了不起的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/,页面正常显示内容,如下: