Node.js 开发入门(3)-static
2017-03-17 本文已影响39人
明月钓无痕
1. 静态资源文件是做什么的
和 PHP 等后台语言不同,在 Node 中,我们请求的路径并非对应真实的文件夹,而是通过路由进行操作到指定的文件夹.
在开发中,一些网页,及图片等资源,会放到静态文件资源区.但是 Node 默认是没有的.
2. 如何建立静态资源文件区
这里用到的模块
var http = require("http");
var url = require("url"); // 处理 url
var fs = require("fs"); // 文件操作
var path = require("path"); // 处理路径
创建 HTTP 服务器
http.createServer((request, response) => {
// 得到用户的路径 端口号后面的路径
let pathName = url.parse(request.url).pathname;
if(pathName == '/') {
pathName = "index.html";
}
// 获取扩展名
let extName = path.extname(pathName);
fs.readFile('./static/' + pathName, (error, data) => {
if (error) {
// 文件不存在 返回404
fs.readFile('./static/404.html', (error, data) => {
response.writeHead(404, {"Content-Type": "text/html;charset=UTF8"});
response.end(data);
});
return;
}
// 获取MIME 类型
getMime(extName, (error, mime) => {
console.log(mime);
response.writeHead(200, {"Content-type":mime});
response.end(data);
});
});
}).listen(3000, "172.20.35.60");
简单的获取 MIME 类型
function getMime(extname){
switch(extname){
case ".html" :
return "text/html";
break;
case ".jpg" :
return "image/jpg";
break;
case ".css":
return "text/css";
break;
}
}
3. url 模块介绍
url模块是对 URL 进行解析的.我们常用到的
例如如下的
url'http://user:pass@host.com:8080/p/a/t/h?query=string#hash'
pathname
表示URL的路径部分,自主机和查询之前,包括初始斜杠,不进行解码. /p/a/t/h
search
表示 URL 的参数部分. ?query=string
path
包括 pathname 和 search部分
port
端口号 8080
protocol
协议名 http:
4.Path 模块
对于处理 url 我们会配合 Path 模块,这样方便处理文件,扩展名等等信息
path.basename(p[, ext])
返回路径的最后一部分
path.basename('/foo/bar/baz/asdf/quux.html')
// returns 'quux.html'
path.basename('/foo/bar/baz/asdf/quux.html', '.html')
// returns 'quux'
path.dirname(p)
返回目录的路径
path.dirname('/foo/bar/baz/asdf/quux')
// returns '/foo/bar/baz/asdf'
path.extname(p)
返回扩展名
path.extname('index.html')
// returns '.html'
path.extname('index.coffee.md')
// returns '.md'
path.extname('index.')
// returns '.'
path.extname('index')
// returns ''
path.extname('.index')
// returns ''
path.join([path1][, path2][, ...])
合并两个路径
path.normalize(p)
路径规范化.
path.parse(pathString)
将字符串转化为一个路径对象
path.parse('/home/user/dir/file.txt')
// returns
// {
// root : "/",
// dir : "/home/user/dir",
// base : "file.txt",
// ext : ".txt",
// name : "file"
// }