nodejs学习笔记<七> 路由
// 引用模块(与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学习笔记<七> 路由的更多相关文章
- Nodejs学习笔记(十五)--- Node.js + Koa2 构建网站简单示例
目录 前言 搭建项目及其它准备工作 创建数据库 创建Koa2项目 安装项目其它需要包 清除冗余文件并重新规划项目目录 配置文件 规划示例路由,并新建相关文件 实现数据访问和业务逻辑相关方法 编写mys ...
- [转]Nodejs学习笔记(十五)--- Node.js + Koa2 构建网站简单示例
本文转自:https://www.cnblogs.com/zhongweiv/p/nodejs_koa2_webapp.html 目录 前言 搭建项目及其它准备工作 创建数据库 创建Koa2项目 安装 ...
- Nodejs学习笔记(十五)—Node.js + Koa2 构建网站简单示例
前言 前面一有写到一篇Node.js+Express构建网站简单示例:http://www.cnblogs.com/zhongweiv/p/nodejs_express_webapp.html 这篇还 ...
- Nodejs学习笔记(四)——支持Mongodb
前言:回顾前面零零碎碎写的三篇挂着Nodejs学习笔记的文章,着实有点名不副实,当然,这篇可能还是要继续走着离主线越走越远的路子,从简短的介绍什么是Nodejs,到如何寻找一个可以调试的Nodejs ...
- Nodejs学习笔记(三)——一张图看懂Nodejs建站
前言:一条线,竖着放,如果做不到精进至深,那就旋转90°,至少也图个幅度宽广. 通俗解释上面的胡言乱语:还没学会爬,就学起走了?! 继上篇<Nodejs学习笔记(二)——Eclipse中运行调试 ...
- Nodejs学习笔记(六)--- Node.js + Express 构建网站预备知识
目录 前言 新建express项目并自定义路由规则 如何提取页面中的公共部分? 如何提交表单并接收参数? GET 方式 POST 方式 如何字符串加密? 如何使用session? 如何使用cookie ...
- Nodejs学习笔记(十六)--- Pomelo介绍&入门
目录 前言&介绍 安装Pomelo 创建项目并启动 创建项目 项目结构说明 启动 测试连接 聊天服务器 新建gate和chat服务器 配置master.json 配置servers.json ...
- Nodejs学习笔记(十六)—Pomelo介绍&入门
前言&介绍 Pomelo:一个快速.可扩展.Node.js分布式游戏服务器框架 从三四年前接触Node.js开始就接触到了Pomelo,从Pomelo最初的版本到现在,总的来说网易出品还算不错 ...
- Nodejs学习笔记(六)—Node.js + Express 构建网站预备知识
前言 前面经过五篇Node.js的学习,基本可以开始动手构建一个网站应用了,先用这一篇了解一些构建网站的知识! 主要是些基础的东西... 如何去创建路由规则.如何去提交表单并接收表单项的值.如何去给密 ...
随机推荐
- java String的intern()方法
intern()方法用于将字符串对象加入常量池中. public native String intern(); intern()方法返回的是一个常量池中的String对象(即常量池中某个String ...
- 分页-jquery.page.js插件在使用时重复触发“上一页”和“下一页”操作
HTML代码 <!-- <div class="zxf_pagediv" id="Pagination" style="display:b ...
- Zookeeper基本数据模型
一.Zookeeper基本数据模型 是一个树形结构,类似于前端开发中的tree.js组件 zk的数据模型也可以理解为linux/unix的文件目录 /usr/local/... 每一个节点称之为zn ...
- iis上的aps.net1.1程序池如何添加
http://www.jb51.net/article/84668.htm iis上的aps.net1.1 的程序池是默认有的,如果不小心将其删掉,或者改成其他版本,将没办法在iis工具上还原或新建一 ...
- c++ 函数中的部分代码执行一次
编程时有时需要将一段代码中的某一块只执行一次: #include<iostream> using namespace std; int fun1(int a) { static bool ...
- Shell中怎么获取当前日期和时间
转载自:https://zhidao.baidu.com/question/627912810044012524.html 获得当天的日期 [root@master ~]# date +%Y-%m-% ...
- centos中nodejs npm安装cordova
1.安装cordova npm install -g cordova --registry https://registry.npm.taobao.orgnpm install -g ionic -- ...
- MySQL Master High Available 源码篇
https://m.aliyun.com/yunqi/users/1287368569594542/articles https://yq.aliyun.com/articles/59233 MySQ ...
- windows服务命令 转载
OnCustomCommand executes when the Service Control Manager (SCM) passes a custom command to the servi ...
- 忽略时间的小时分,展示的方法 data函数
date(create_at) 列表: sql: