Node.js学习笔记 01 搭建静态服务器
希望这篇文章能解决你这样一个问题:“我现在已经了解了一些Node.Js基本概念了,怎么搭一台静态服务器呢?”
请参考一下博主的前两篇文章:
Node.Js的Module System 以及一些常用 Module
本文实现的效果(样式就没做了,大家将就下):


列出的代码均测试可用,大家放心。
What is static server?
静态服务器,有了它呢,就可以让外部访问到咱们的静态网页。在功能上:它可以给用户发送文件(如:HTML, CSS, Js等)。正如上一篇文章所说:
Node.js本身并不是像IIS,Apache一样的webserver,它是一个JavaScript 的运行环境。所以,我们需要进行编码才能实现一个真正的京台服务器。
File stucture
后台目录建立如下,比较常规。大家可以随意定义目录结构,代码上相应地方改动一下就好。
app.js
本文的重点在于接下来的server模块,就不介绍app.js里的代码啦。(把主线代码写在app.js中是个不成文的约定,无需遵守,随意,随意。。。)
var http = require('http');
var path = require('path');
//引入我们自己编写的server模块
var server = require('./server.js');
http.createServer(function (request, response) {
//以下的判断用来做简单的路由
if (request.url == "/") {
filePath = path.join(__dirname, '/public/index.html');
} else {
filePath = path.join(__dirname, '/public' + request.url);
}
server.serveStatic(response, filePath);
}).listen(/*侦听4000端口*/4000, function () {
console.log("Server listening on port 4000");
});
MIME
静态服务器有一个必须实现的功能即为在HTTP报文中指定MIME type. WIKI MIME
我们会引用一个第三方组件mime,通过npm安装,该组件可以根据文件的extension name映射mime type.
所以,请在根目录运行一下 npm install mime --save
server.js
var fs = require('fs');
//provide the ability to derive a mime type based on the filename extension
var mime = require('mime');
var cache = {};
//这不是IIS,Apache所以404必须自定义一下,
function send404(response) {
response.writeHead(404, { "Content-Type": "text/html" });
response.write("<h1>ERROR 404 FILE NOT FOUND</h1>");
response.end();
}
//向客户端发送文件
function sendFile(response, filePath, fileContents) {
response.writeHead(200, { "Content-Type": mime.lookup(filePath) });
response.end(fileContents);
}
//这个函数导出,给主模块使用
function serveStatic(response, absPath) {
if (cache[absPath]) {
sendFile(response, absPath, cache[absPath]);
} else {
fs.exists(absPath, function (exists) {
if (exists) {
fs.readFile(absPath, function (err, data) {
if (err) {
send404(response);
} else {
cache[absPath] = data;
sendFile(response, absPath, data);
}
});
}
else {
send404(response);
}
});
}
}
exports.serveStatic = serveStatic;
解释部分如注释。。。至此,编码部分就完啦。
How to test
我们可以在./public 下放一个index.html 内容随意。。。node 跑起来后,只要输入 http://localhost:4000 返回的是它,输入http://localhost:4000/XXX 返回的是404,那么,静态服务器就搭起来了。
Summary
这个DEMO过于简单,应该不能满足大家胃口。以后会介绍如何搭一个动态的网站(以Restful service为例)。
Node.js学习笔记 01 搭建静态服务器的更多相关文章
- Node.js学习笔记(1):Node.js快速开始
Node.js学习笔记(1):Node.js快速开始 Node.js的安装 下载 官方网址:https://nodejs.org/en/ 说明: 在Windows上安装时务必选择全部组件,包括勾选Ad ...
- 一点感悟:《Node.js学习笔记》star数突破1000+
写作背景 笔者前年开始撰写的<Node.js学习笔记> github star 数突破了1000,算是个里程碑吧. 从第一次提交(2016.11.03)到现在,1年半过去了.突然有些感慨, ...
- Node.js学习笔记(2):基本模块
Node.js学习笔记(2):基本模块 模块 引入模块 为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码就相对较少,很多编程语言都采用这种组织代码的方式.在No ...
- Node.js学习笔记(3):NPM简明教程
Node.js学习笔记(3):NPM简明教程 NPM常用操作 更新NPM版本 npm install npm -g -g,表示全局安装.我们可以指定更新版本,只需要在后面填上@版本号即可,也可以输入@ ...
- 系列文章--Node.js学习笔记系列
Node.js学习笔记系列总索引 Nodejs学习笔记(一)--- 简介及安装Node.js开发环境 Nodejs学习笔记(二)--- 事件模块 Nodejs学习笔记(三)--- 模块 Nodejs学 ...
- Node.js学习笔记(4):Yarn简明教程
Node.js学习笔记(4):Yarn简明教程. 引入Yarn NPM是常用的包管理工具,现在我们引入是新一代的包管理工具Yarn.其具有快速.安全.可靠的特点. 安装方式 使用npm工具安装yarn ...
- Node.js学习笔记(一)基础介绍
什么是Node.js 官网介绍: Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine. Node.js us ...
- Node.js学习笔记(2) - Node.js安装及入门hello world
今天来简单的记录一下Node.js的安装配置以及简单的入门 一.Node.js的安装 1.windows下的安装 windows下的安装很简单,只需要去官网http://nodejs.org中,找到w ...
- Node.js学习笔记(六) --- Nodejs 的非阻塞 I/O、 异步、 事件驱动
1. Nodejs 的单线程 非阻塞 I/O 事件驱动在 Java. PHP 或者.net 等服务器端语言中,会为每一个客户端连接创建一个新的线程.而每个线程需要耗费大约 2MB 内存.也就是说,理论 ...
随机推荐
- kubernetes源码解析---- apiserver路由构建解析(1)
kubernetes源码解析---- apiserver路由构建解析(1) apiserver作为k8s集群的唯一入口,内部主要实现了两个功能,一个是请求的路由和处理,简单说就是监听一个端口,把接收到 ...
- Bootstrap 3支持IE 8遇到的一个小问题
使用Bootstrap完成web的UI后,在IE 8运行时,发现.container等class的标签的的宽度并没按预期的宽度显示,本人已经根据bootstrap官方说明 http://getboot ...
- [转载]:Endnote 自定义style文件的默认位置
一般而言,安裝完EndNote 後,預設Output Styles.Filters.Connection Files 的電腦存放路徑如下– C:\Program Files\EndNote X4 ...
- SecondaryNamenode配置与NameNode故障恢复
一.配置 1. 在masters文件中添加 Secondary节点的主机名. *注:masters文件用于指定secondary的主机而不是namenode,slaves用于指定datanode和ta ...
- HBase简介(很好的梳理资料)
http://www.tuicool.com/articles/iieIz2 一. 简介 history started by chad walters and jim 2006.11 G re ...
- 【项目相关】MVC中使用WebUploader进行图片预览上传以及编辑
项目中需要用到多图片上传功能,于是在百度搜了一下,首先使用了kissy uploader,是由阿里前端工程师们发起创建的一个开源 JS 框架中的一个上传组件...但,后面问题出现了. 在对添加的信息进 ...
- linux下怎么编译运行C语言程序?
linux下的C语言编译器是gcc,C++的编译器是g++. linux下编程可以使用编辑器vi或vim,建议使用vim,因为它有语法高亮显示.程序编写好后,假设你的程序名为test.c,可以使用gc ...
- Win 2003下IIS6+Mysql+php5.2 isapi搭建 升级php5.2到5.3测试 借助fastcgi实现
Win 2003下IIS6+Mysql+php5.2 原环境isapi搭建 升级php5.2到5.3测试 借助fastcgi实现 操作如下 实验前准备:php-5.3.5-Win32-VC6-x86 ...
- 合并多个List<T>类型并通过LINQ按指定属性排序
后台CS代码: namespace WebFormTest.TestCollect { public partial class ListTest : System.Web.UI.Page { pro ...
- js日期格式化方法 dateFormatFn
var dateFormatFn=function(val,fmt){ var _this = new Date(val); console.log(_this,_this.getFullYear() ...