// 引用模块(与C#中命名空间,Java中引用包同理)
var http = require("http");
var path = require("path");
var fs = require("fs");
var url = require("url"); // 封装路由函数
function Root(visit_path,request,response){
var pathObj = url.parse(request.url,true); // 获取请求路径,解析为url对象
var filePath = path.join(visit_path,pathObj.pathname); // 拼接目录路径和请求路径,组合成完整访问路径 var fileContent = fs.readFileSync(filePath,'binary'); // 读取目标路径下的文件,以二进制读取(binary)
response.write(fileContent,'binary'); // 将解析的文件以二进制(binary)方式发送
response.end();
} http.createServer((request,response) => {
Root(path.join(__dirname,'view'),request,response); // __dirname是nodejs内置变量,用来获取当前文件所在的路径
}).listen(8080,'127.0.0.1');
console.log("success !");

使用readFileSync以同步的方式读取,同步方式读取文件,若遇到请求路径下没有文件,服务器就会直接挂掉。

// 引用模块(与C#中命名空间,Java中引用包同理)
var http = require("http");
var path = require("path");
var fs = require("fs");
var url = require("url"); // 封装路由函数
function Root(visit_path,request,response){
var pathObj = url.parse(request.url,true); // 获取请求路径,解析为url对象
var filePath = path.join(visit_path,pathObj.pathname); // 拼接目录路径和请求路径,组合成完整访问路径
/**
* 一般服务器路由使用readFile异步方式去读文件
* 这样可以根据返回的错误信息做不同处理
*/
fs.readFile(filePath,'binary',(err,fileContent) => {
if(err){
response.writeHead(404,'not found');
response.end('<h1>404 未找到页面</h1>');
}else{
response.write(fileContent,'binary');
response.end();
}
});
} http.createServer((request,response) => {
Root(path.join(__dirname,'view'),request,response); // __dirname是nodejs内置变量,用来获取当前文件所在的路径
}).listen(8080,'127.0.0.1');
console.log("success !");

用readFile异步方式读取就能解决请求路径下没找到文件,服务器挂掉的问题。

readFile()的callback中第一个参数[err]是一个对象,当解析路径出错这样一个对象。

关于 /favicon.ico 请求的问题,在请求启动服务后加上 “Server has started.”

nodejs学习笔记<七> 路由的更多相关文章

  1. Nodejs学习笔记(十五)--- Node.js + Koa2 构建网站简单示例

    目录 前言 搭建项目及其它准备工作 创建数据库 创建Koa2项目 安装项目其它需要包 清除冗余文件并重新规划项目目录 配置文件 规划示例路由,并新建相关文件 实现数据访问和业务逻辑相关方法 编写mys ...

  2. [转]Nodejs学习笔记(十五)--- Node.js + Koa2 构建网站简单示例

    本文转自:https://www.cnblogs.com/zhongweiv/p/nodejs_koa2_webapp.html 目录 前言 搭建项目及其它准备工作 创建数据库 创建Koa2项目 安装 ...

  3. Nodejs学习笔记(十五)—Node.js + Koa2 构建网站简单示例

    前言 前面一有写到一篇Node.js+Express构建网站简单示例:http://www.cnblogs.com/zhongweiv/p/nodejs_express_webapp.html 这篇还 ...

  4. Nodejs学习笔记(四)——支持Mongodb

    前言:回顾前面零零碎碎写的三篇挂着Nodejs学习笔记的文章,着实有点名不副实,当然,这篇可能还是要继续走着离主线越走越远的路子,从简短的介绍什么是Nodejs,到如何寻找一个可以调试的Nodejs ...

  5. Nodejs学习笔记(三)——一张图看懂Nodejs建站

    前言:一条线,竖着放,如果做不到精进至深,那就旋转90°,至少也图个幅度宽广. 通俗解释上面的胡言乱语:还没学会爬,就学起走了?! 继上篇<Nodejs学习笔记(二)——Eclipse中运行调试 ...

  6. Nodejs学习笔记(六)--- Node.js + Express 构建网站预备知识

    目录 前言 新建express项目并自定义路由规则 如何提取页面中的公共部分? 如何提交表单并接收参数? GET 方式 POST 方式 如何字符串加密? 如何使用session? 如何使用cookie ...

  7. Nodejs学习笔记(十六)--- Pomelo介绍&入门

    目录 前言&介绍 安装Pomelo 创建项目并启动 创建项目 项目结构说明 启动 测试连接 聊天服务器 新建gate和chat服务器 配置master.json 配置servers.json ...

  8. Nodejs学习笔记(十六)—Pomelo介绍&入门

    前言&介绍 Pomelo:一个快速.可扩展.Node.js分布式游戏服务器框架 从三四年前接触Node.js开始就接触到了Pomelo,从Pomelo最初的版本到现在,总的来说网易出品还算不错 ...

  9. Nodejs学习笔记(六)—Node.js + Express 构建网站预备知识

    前言 前面经过五篇Node.js的学习,基本可以开始动手构建一个网站应用了,先用这一篇了解一些构建网站的知识! 主要是些基础的东西... 如何去创建路由规则.如何去提交表单并接收表单项的值.如何去给密 ...

随机推荐

  1. 菜鸟如何学习vue

    作为一个前端菜鸟,最近开始接触和学习vue. 以前用到的是bootstrap前端框架. Bootstrap,来自 Twitter,是目前最受欢迎的前端框架. Bootstrap 是基于 HTML.CS ...

  2. hanlp在Python环境中的安装失败后的解决方法

    Hanlp是由一系列模型与算法组成的javag工具包,目标是普及自然语言处理再生环境中的应用.有很多人在安装hanlp的时候会遇到安装失败的情况,下面就是某大神的分享的在python环境中安装失败的解 ...

  3. linux系统中安装JDK 查看安装的ava版本

    一.安装JDK 1.在/usr/目录下创建java目录 [root@localhost ~]# mkdir/usr/java[root@localhost ~]# cd /usr/java 2.下载j ...

  4. iOS开发 SourceTree将develop合并到master分支的详细步骤

  5. Apache Tika

    Tika入门 Tika是一个内容抽取的工具集合(a toolkit for text extracting).它集成了POI, Pdfbox 并且为文本抽取工作提供了一个统一的界面.其次,Tika也提 ...

  6. c# 几种常见的弹框方法

    1.ClientScript.RegisterStartupScript(this.GetType(), "", "<script>alert('第一行'); ...

  7. Thinkphp 3.1. 3 ueditor 1.4.3 添加水印

    1.引入Ueditor  <!-- 实例化编辑器 --> <script type="text/javascript"> window.UEDITOR_HO ...

  8. Python 进制转换与位运算

    十进制转二进制.八进制.十六进制: dec = int(input("输入数字:")) print("十进制数为:", dec) print("转换为 ...

  9. sql server 安装时提示要重启

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager 打开“Session Manager”文件夹之后在右侧的区域中单 ...

  10. [转]jvm加载类规则

    jvm包括三种类加载器: 第一种:bootstrap classloader:加载Java的核心类. 第二种:extension classloader:负责加载jre的扩展目录中的jar包. 第三种 ...