nodejs实战:使用原生nodeJs模块实现静态文件及REST请求解析及响应(基于nodejs6.2.0版本,不使用express等webMVC框架 )
一、准备工作
1、安装nodejs
首先你需要安装nodeJs
那么nodejs官网:http://nodejs.cn/,下载相应版本,一步一步安装。
二、使用nodejs开发服务器后台应用
1、创建nodejs应用
直接上代码
var http = require('http');
var fs = require('fs');
var url = require('url');
var path = require('path');
var queryString = require('querystring');
//解析REST请求
function parseReq(response, pathName, queryStr) {
//解析请求参数
var reqStr = queryString.parse(queryStr);
switch (pathName) {
//简单实例,解析请求参数获取用户名并通过json数据返回
case "/dojoTest/getUser":
response.writeHead(200, { 'Content-Type': 'application/json;charset=utf-8' });
var str = "{'errNum': 200,'retMsg': '请求成功','data':' 用户名是:" + reqStr.user + "'}";
response.write(str);
break;
//简单实例:通过REST请求方式获取当前时间
case "/dojoTest/getTime":
response.writeHead(200, { 'Content-Type': 'application/json;charset=utf-8' });
response.write("{'errNum': 200,'retMsg': '请求成功','data':' 当前时间:" + new Date().toLocaleString() + "'}");
break;
//如果没有对应的REST请求,报个501错误给浏览器
default:
response.writeHead(501, { 'Content-Type': 'application/json;charset=utf-8' });
response.write('{"errNum": 501,"retMsg":"请求失败:该请求不存在","data":"null"}');
}
response.end();
};
//解析静态请求
function staticFileReq(response, pathName, suffixStr) {
//读取静态文件并生成流
fs.readFile(pathName.substr(1), function(err, data) {
if (err) {
console.log(err);
//HTTP 404 :页面不存在
//没找到对应的静态文件怎么办,给个404错误
response.writeHead(404, { 'Content-Type': 'text/html;charset=utf-8' });
//响应文件流
response.write("页面不存在!404");
response.end();
} else {
//HTTP 200 : 成功
if (suffixStr === ".css") {
//设置charset=utf-8防止乱码
response.writeHead(200, { 'Content-Type': 'text/css;charset=utf-8' });
} else {
response.writeHead(200, { 'Content-Type': 'text/html;charset=utf-8' });
}
//响应文件流
response.write(data.toString());
response.end();
}
});
}
//创建服务器
http.createServer(function(request, response) {
//获取请求地址
var requrl = request.url;
var urlparse = url.parse(requrl);
//请求路径
var pathname = urlparse.pathname;
//pathname+参数
// var urlpath = urlparse.path;
//参数
var query = urlparse.query;
//同上,但参数前多个?
// var search = urlparse.search;
//后缀
var suffix = path.extname(pathname);
//控制台显示信息
// console.log("Request for " + pathname + " received,path is " + urlpath + ",query is" + query + ",search is" + search);
console.log("Request for " + pathname + "received,suffix is " + suffix + ",query is " + query);
if (suffix != null && suffix.trim() != "") {
//静态文件处理
staticFileReq(response, pathname, suffix);
} else {
//动态请求处理
parseReq(response, pathname, query);
}
//响应结束
}).listen(8081);
//开启后在控制台显示该服务正在运行
console.log('Server running at http://127.0.0.1:8081/');
2、运行编写好的应用
3、从浏览器端发送请求和浏览页面
浏览器发送请求
nodejs实战:使用原生nodeJs模块实现静态文件及REST请求解析及响应(基于nodejs6.2.0版本,不使用express等webMVC框架 )的更多相关文章
- nodeJS实战:自定义模块与引入,不同模块的函数传递及回调处理,exports与module.exports(基于nodejs6.2.0)
前言:本文基于上一篇文章中的源代码进行改写,地址:http://blog.csdn.net/eguid_1/article/details/52182386 注意:为什么不用module.export ...
- iis重写模块实现程序自动二级域名,微软提供的URL重写2.0版本适用IIS以上
在iis7以后微软提供了url重写2.0版本,可以通过安装重写组件来实现.适用于iis7以上版本. 安装有两种方式可以选择,一是下载安装文件,二是通过“web平台安装程序”安装 1.下载安装文件 下载 ...
- django中url,静态文件,POST请求的配置 分类: Python 2015-06-01 17:00 789人阅读 评论(0) 收藏
平时使用的是pycharm,所以这篇文章主要也是使用pycharm默认创建的django项目为基础进行讲解.项目目录如下图: 1.URL的配置 当创建好项目后,运行项目就可以看到django默认的页面 ...
- django之三剑客、静态文件配置、请求响应对象、数据库操作
三剑客 from django.shortcuts import render,HttpResponse,redirect HttpResponse # 返回字符串 render(response, ...
- .Net Core 中间件之静态文件(StaticFiles)源码解析
一.介绍 在介绍静态文件中间件之前,先介绍 ContentRoot和WebRoot概念. ContentRoot:指web的项目的文件夹,包括bin和webroot文件夹. WebRoot:一般指Co ...
- 基于Python原生asyncio模块对DNS正向和反向的解析
一.正向解析:域名解析IP地址 import asyncio import socket domains = [ ('www.baidu.com', 'https'), ('cn.bing.com', ...
- NW.js安装原生node模块node-printer控制打印机
1.安装原生node模块 #全局安装nw-gyp npm install -g nw-gyp #设置目标NW.js版本 set npm_config_target=0.31.4 #设置构建架构,ia3 ...
- nginx实现动态/静态文件缓存(week4_day1_part2)-技术流ken
nginx实现静态文件缓存实战 1.nginx静态文件缓存 如果要熟练使用nginx来实现文件的缓存,那下面的几个指令你必须要牢记于心 指令1:proxy_cache_path 作用:设置缓存数据的相 ...
- Express static 托管静态文件 理解
今天偶尔看了一下服务端渲染,遇到了express.static, 在以前学习webpack配置服务端渲染时,也使用express.static 中间件,两者配置不太一样,由于当时也没有认真学,所以 一 ...
随机推荐
- CF #271 F Ant colony 树
题目链接:http://codeforces.com/contest/474/problem/F 一个数组,每一次询问一个区间中有多少个数字可以整除其他所有区间内的数字. 能够整除其他所有数字的数一定 ...
- FancyBox – 经典 Lightbox 效果插件
效果演示 插件下载
- Javascript中call和apply
在上一章http://www.cnblogs.com/meiyh/p/6207671.html 我有提到javascript很重要的this关键字,现在我们结合这个关键字使用的下面的两个关键字: ca ...
- CentOS_5.6下使用cmake编译MySQL_5.5.11教程
注:资料来自网络 Centos 5.6编译安装mysql 5.5.11 2011年06月24日 星期五 05:33 MySQL 最新的版本5.5.11需要cmake编译安装,估计以后的版本也会采 ...
- Less与Sass
less 1.变量 声明变量:@变量名:变量值 使用变量:@变量名 >>>Less中变量的类型 ①数字类:1 100px ②字符串:无引号字符串[red] 有引号字符串[&qu ...
- 【WPF】学习笔记(二)——依旧是一个电子签名板
这篇博客呢,主要谈谈在实现电子签名功能中踩过的几个坑:1.System.BadImageFormatException异常:2.无法加载DLL“###.dll”,: 找不到指定的模块. (异常来自 H ...
- Android NDK开发之从Java与C互调中详解JNI使用(一)
生活 这一个礼拜过得真的是苦不堪言,上周因为打球脚踝直接扭伤,肿的想猪蹄一样,然后休息几天消肿了,可以缓慢龟速的行走了,然而五一回来上班第一天,上班鞋子还能穿上,下班脚已插不进鞋子里面了,好吧,又肿回 ...
- struts2标签库----控制标签详解
前面几篇文章我们介绍了有关struts2的基本内容,简单理解了整个框架的运作流程.从本篇开始我们逐渐了解和使用struts2为我们提供的标签库技术,使用这些标签可以大大降低我们表现层的开发难 ...
- 前端模块化——seaJS
1.seaJS手记 一:Bower获取 要安装bower Npm install -g bower Bower install seajs 二:Use方法是整个项目的入口方法,通常一个项目中只调用一次 ...
- hdu1150 Machine Schedule 经典二分匹配题目
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1150 很经典的二分题目 就是求最小点覆盖集 二分图最小点覆盖集=最大匹配数 代码: #include& ...