// 引用模块(与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. java JVM JRE JDK三者之间的关系

    JDK在包含JRE之外,提供了开发Java应用的各种工具,比如编译器和调试器. JRE包括JVM和JAVA核心类库和支持文件,是Java的运行平台. JVM是JRE的一部分,Java虚拟机的主要工作是 ...

  2. 读DataSnap源代码(二)

    program Project1; {$APPTYPE GUI} {$R *.dres} uses Vcl.Forms, Web.WebReq, IdHTTPWebBrokerBridge, Form ...

  3. Spring Cloud Zuul 快速入门

    Spring Cloud Zuul 实现了路由规则与实例的维护问题,通过 Spring Cloud Eureka 进行整合,将自身注册为 Eureka 服务治理下的应用,同时从 Eureka 中获取了 ...

  4. 【java】public,private和protected

    public表示紧随其后的元素对任何人都是可用的,而private这个关键字表示除类型创建者和类型内部方法之外的任何人都不能访问的元素.protected关键字与private作用相当,差别仅在于继承 ...

  5. MySQL 快速构造一亿条记录的表

    在上一次朋友问我如何快速构造一亿条记录的表后,我理出了实行的办法,见:http://blog.csdn.net/mchdba/article/details/52938114,但是因为录入一亿表需要2 ...

  6. Gradle详细解析***

    前言 对于Android工程师来说编译/打包等问题立即就成痛点了.一个APP有多个版本,Release版.Debug版.Test版.甚至针对不同APP Store都有不同的版本.在以前ROM的环境下, ...

  7. C#发布程序添加其他程序文件

    注:程序发布文件,默认只发布自身程序直接引用的相关文件(A程序). 如果需要添加其他程序(不同的应用程序B)文件,操作方法如下: 第一步:将B程序文件复制到A程序 第二步:将B程序文件右键--> ...

  8. 黄聪: bootstrap 多模态框实现

    默认情况下,bootstrap模态框是不支持多个覆盖的,下面是一个解决办法(本人亲测), 将下面的代码复制到当前需要多个模态框的页面,问题就可以解决 $(document).on('show.bs.m ...

  9. ALGO-117_蓝桥杯_算法训练_友好数

    问题描述 有两个整数,如果每个整数的约数和(除了它本身以外)等于对方,我们就称这对数是友好的.例如: 9的约数和有:+= 4的约数和有:+= 所以9和4不是友好的. 220的约数和有: = 284的约 ...

  10. solr Query[转]

    一. Query参数 1. CoreQueryParam查询的参数 1) q: 查询字符串,必须的. 2) q.op: 覆盖schema.xml的defaultOperator(有空格时用" ...