2019-05-14 Node.js简单的静态服务器
2019-05-14 本文已影响0人
Ztry
前言
- 近期在学习Node.js一些基础知识,想通过一些demo和一些实战性的东西加强一下,顺便加快前端开发效率问题;
- 从一个简单的静态服务器开始
开始
- Node.js的基础模块:http、url、path、fs
- MIME的了解
- 开撸
// 参考以上链接的demo,发现一些小错误,通过查找Node.js的文档修改了一下代码
var http = require("http"),
url = require("url"),
path = require("path"),
fs = require("fs");
var server = http
.createServer(function(req, res) {
// res.setHeader('Content','keep-alive');
// res.setHeader('Expires','Mon, 31 Dec 2012 23:59:59 GMT');
//res.setHeader('Cache-Control', 'max-age=31536000');
var pathname = path.join(__dirname,url.parse(req.url).pathname); // 获取访问路径url的目录路径部分
if (path.extname(pathname) == "") { //path.extname() 拿出拓展名
pathname += "/";
}
if (pathname.charAt(pathname.length - 1) == "/") {
pathname += "index.html";
}
// fs.exists(pathname, function(exists) { //fs.exists已经废弃, 改用fs.access(path[,mode],callback), 但是后边有读写操作不推荐用fs.access, 改用fs.readFile
// console.log(pathname)
fs.readFile(pathname,function(err,data){
if(err){
console.error(err)
res.writeHead(404, { "Content-Type": "text/html" });
res.end("<h1>404 Not Found</h1>");
}else{
var type = {
".html": "text/html",
".htm": "text/html",
".js": "application/javascript",
".css": "text/css",
".ico": "image/x-icon",
".jpeg": "image/jpeg",
".jpg": "image/jpeg",
".png": "image/png",
".gif": "image/gif",
".xml": "text/xml",
".json": "application/json",
".txt": "text/plain",
".pdf": "application/pdf",
".swf": "application/x-shockwave-flash",
".woff": "application/font-woff",
".ttf": "application/octet-stream",
};
if(type[path.extname(pathname)]){
res.writeHead(200, {
"Content-Type": type[path.extname(pathname)]
});
}
res.end(data);
}
});
})
.listen(3001);
console.log("Server is running at http://127.0.0.1:3001/");
过程(遇到的问题)
- 开篇的CNode里面的简单的静态服务器接口有一处错误,path没有exist这方法,另外很多fs的接口已经废弃了,我只好重新阅读文档修改;
- 我搭建这个主要是用来测试ElementUI一些demo学习使用的,发现跑了一个ElementDemo(直接引入),在加载woff和tff文件时存在问题,后来在目录里面放了woff和tff文件,并且加上对应的MIME,然后发现对tff的ContentType有很多不同的表述,就对type[path.extname(pathname)]进行个判断,如果文件存在但是找不到对应的ContentType,不影响文件的读取,只是响应头没有ContentType
总结
- 对Node.js的API还不过熟悉,要加强,同时在对ElementUI的一些demo进行学习的时候,把Node.js一些文件读写上传的学习一下。