//app.js
var express = require("express");
//以后的时后处理POST DELETE PATCH CHECKOUT 这些请求都可以用formoidable
var formidable = require("formidable");
var url = require("url"); //返回app对象
var app = express(); //静态出一个文件夹
app.use(express.static("www")); //中间价
//GET请求
app.get("/tijiao",(req,res)=>{
//将query部分变为一个对象(jso)
var obj = url.parse(req.url,true).query;
console.log("我是后台工程师我拿到了数据"+obj.name+obj.age);
//给前端工程师返回一点东西
res.json({"result":1});
}); //POST请求:因为post请求使用的报问题,那么你不同通过req形式获取到数据
app.post("/tijiao",(req,res)=>{
//这个是formidable构造函数的方法,产生一个form表单对象
var form = new formidable.IncomingForm();
//form对象有一个parse方法(req,callBack(err,fields,files))
form.parse(req, function(err, fields, files) {
res.json({"result":fields.name})
});
}); app.delete("/remove",(req,res)=>{
var form = new formidable.IncomingForm();
//form对象有一个parse方法(req,callBack(err,fields,files))
form.parse(req, function(err, fields, files) {
res.json({"result":fields.id})
});
});
//监听事件
app.listen(3000);
//静态页面
<script type="text/javascript">
//发起的是GET请求
$("button:eq(0)").click(function (argument) {
$.get("/tijiao",{"name":"小明","age":18},function (data) {
console.log(data.result);
})
}); //POST 请求
$("button:eq(1)").click(function (argument) {
$.post("/tijiao",{"name":"贾成豪","age":18},function (data) {
alert(data.result);
});
}); //DELETE 请求
$("button:eq(2)").click(function (argument) {
$.ajax({
'url':"/remove",
"type":"DELETE",
"data":{
"id":8
},
"success":function (data) {
alert(data.result);
} })
});
</script>

一、模块依赖的步骤

第一步:创建咱们工程的‘身份证’,一个pageage.json文件

第二步:添加你的项目的依赖,你在项目当中需要require();但是别忘记要添加一个--save,添加他的目的是让咱们的身份证知道你的项目有哪些依赖;

第三步:如果你的依赖没有下载,但是你的身份证当中已经有了项目的依赖,你就可以npm install

var url = require("url");//内置url的模块

url.parse(req.url);//一个URL字符串转换成对象并返回

url.parse(urlStr, [parseQueryString], [slashesDenoteHost])

接收参数:

urlStr                                       url字符串

parseQueryString                   为true时将使用查询模块分析查询字符串,默认为false

slashesDenoteHost

默认为false,//foo/bar 形式的字符串将被解释成 { pathname: ‘//foo/bar' }

如果设置成true,//foo/bar 形式的字符串将被解释成  { host: ‘foo', pathname: ‘/bar' }

//app.js
//需要内置的模块HTTP
var http = require("http");
//自己封装的money模块
var money = require("./controller/money.js")
//自己封装的农历的模块
var nongli = require("./controller/nongli.js"); //使用系统内置的url模块
var url = require("url"); var server =http.createServer((req,res)=>{
//端口号后面的数据我们是可以用url对象获取到的
var pathName = url.parse(req.url).pathname;
if(req.url=="/"){
//主页面的路由
res.setHeader("Content-type","text/html;charset=utf8");
res.end("欢迎你进入我的作业页面");
//拼音的路由
}else if(/^\/pinyin\/.+$/.test(pathName)){
money.toMoney(res,pathName);
//农历转换
}else if(/^\/nongli\/\d+\/\d+\/\d+$/.test(pathName)){
nongli.toNongli(res,pathName);
}
});
//监听端口号
server.listen(3000);
//money.js文件
//数字的转换的模块
var nzhcn = require("nzh/cn");
exports.toMoney = function (res,pathName) {
res.setHeader("Content-type","text/html;charset=utf8");
var array = pathName.match(/^\/pinyin\/(.+)$/);
//拿到获取的数据
var $1 = array[1];
var money = nzhcn.toMoney($1);
res.end(money);
}
//nongli.js
//农历阴历转换
var solarLunar = require("solarLunar"); exports.toNongli = function (res,pathName) {
//农历阴历转换
res.setHeader("Content-type","text/html;charset=utf8");
var array = pathName.match(/^\/nongli\/(\d+)\/(\d+)\/(\d+)$/);
var year = array[1];
var month = array[2];
var day = array[3];
var solar2lunarData = solarLunar.solar2lunar(year,month, day);// 输入的日子为公历
res.end(solar2lunarData.gzYear+solar2lunarData.gzMonth+solar2lunarData.gzDay);
}

二、CNPM(淘宝镜像)

npm去社区下载项目依赖,下载速度相对会慢一些;

淘宝给咱们官方NPM封装,淘宝创建CNPM镜像;

-g:开发的依赖:它是CLI程序主要辅助咱们开发用的,只是一个可以辅助我们开发的一个工具而已;

--save项目的依赖:你在项目当中需要require()

三、express

1.express 的初体验

var express = require("express");
var app =express();
//中间件
app.get("/pinyin/:shuzi",function (req,res) {
console.log(req.params.shuzi);
res.send("你好我是Express框架");
}); app.get("/nongli/:nian/:yue/:ri",function (req,res) {
console.log(req.params.nian);
console.log(req.params.yue);
console.log(req.params.ri);
res.send("123");
})
app.listen(3000);

2、express的学习

var express = require("express");
var app =express();
//中间件
//中间件
//中间件
//中间件
//中间件
//中间件
//中间件
//中间件
//中间件
//中间件
//中间件
//中间件 app.listen(3000);

3、中间件

概述:app.动词(上行请求的类型),上行请求有26中;

//需要express框架-express返回的是一个函数对象
var express = require("express"); //express函数执行返回一个app对象
var app = express(); //中间件的罗列
app.get("/",(req,res)=>{
//输出用的是send方法,而且也不需要设置字符集因为express帮咱们封装好了
res.send("你好我是express框架");
}); app.get("/zhangjie",(req,res)=>{
res.send("你好我是张杰");
})
app.get("/wangjunkai",(req,res)=>{
res.send("你好我是王俊凯");
}) //监听端口号
app.listen(3000);
var express = require("express");

var app = express();

//罗列中间件
//GET请求
app.get("/tijiao",function (req,res) { res.send("你好我是GET请求");
});
//POST请求
app.post("/tijiao",function (req,res) {
res.send("你好我是POST请求");
});
//删除请求
app.delete("/tijiao",function (req,res) {
res.send("你好我是DELETE请求");
});
//更新某一条数据的请求
app.patch("/tijiao",function (req,res) {
res.send("你好我是patch请求");
});
//更新全部数据的一个请求
app.chekout.......
//监听端口号
app.listen(3000);

提示:咱们中间件可以有多个,响应头可以不用设置字符集了;

4、中间件的顺序

概述:如果中间件的类型是一样的,而且你的url如果一样,那么前者会覆盖后者。

var express = require("express");

var app = express();
var count = 0;
//罗列中间件
app.get("/chaxun/*",function (req,res,next) { count++;
//next是一个函数
next();
}); app.get("/chaxun/:banji/:xuehao",function (req,res) {
var banji = req.params.banji;
var xuehao = req.params.xuehao;
res.send("你好欢迎你查询"+banji+"学号"+xuehao+"查询的次数"+count);
});
//监听端口号
app.listen(3000);

提示:①如果遇见覆盖问题,你要使用的是next函数,而且覆盖的函数不能有res.send();

②捎带的带一些数据/XXX/:banji/:xuehao,但是获取数据的时候 req.params.banji

5、输出

redirect  输出

var express = require("express");

var app = express();
//罗列中间件
app.get("",(req,res)=>{
//四种输出

res.send("你好我是express第一种输出的方法叫做send"); ②输出一个json格式的数据
res.json({"name":"小红","age":18,"hobby":["吃饭","睡觉","打豆豆"]}); ③JSONP数据格式
res.jsonp({"name":"小红","age":18,"hobby":["吃饭","睡觉","打豆豆"]}); ④输出别人的网站的网页
res.redirect("https://www.tmall.com/?pid=mm_26632258_3504122_48284354&b=gsbASSPAEIPyyiq5JGQ&ali_trackid=2:mm_26632258_3504122_48284354:1514002120_255_437563937&clk1=5cdcbfce00b2147eddb2de5d322815db&upsid=5cdcbfce00b2147eddb2de5d322815db");
});
//监听端口号
app.listen(3000);

提示:node的响应对象有四种输出:①send  ②json  ③jsonp  ④redirect

6、外置文件

fs.readFile(path,(err,data)=>{});在express当中他封装了一个函数,sendFile;

var express = require("express");

var app = express();

app.get("/",(req,res)=>{
res.sendFile(__dirname+"/public/1.wangjunkai.html");
}); app.listen(3000);

提示:如果外置文件你必须要使用的是绝对路径

如果外置文件res.sendFile(path);

7.静态出一个文件夹

express框架提供了一个方法,可以静态出一个文件;含义就是静态出去的文件夹当中文件之间,你可以使用相对路径,最爽的一件事,是静态出去的文件夹中的全部的文件你可以不用写路由了,因为express已经帮你做完了;

var express = require("express");

var app = express();

app.use(express.static("www"));

app.listen(3000);

提示:上面操作可以将某一个文件夹静态出去,全部的文件你可以使用相对路径;

四、GET请求POST请求

概述:get伪装URL

post报文体

第一步:创建身份证

第二步:装项目的依赖

第三步:创建咱们的app.js

var express = require("express");

//返回app对象
var app = express(); //静态出一个文件夹
app.use(express.static("www")); //监听事件
app.listen(3000);

第四步

第五步:node app.js  跑起服务器

var obj = url.parse(req.url,true).query;

node(2)的更多相关文章

  1. babeljs源码

    babel.min.js!function(e,t){"object"==typeof exports&&"object"==typeof mo ...

  2. NPM (node package manager) 入门 - 基础使用

    什么是npm ? npm 是 nodejs 的包管理和分发工具.它可以让 javascript 开发者能够更加轻松的共享代码和共用代码片段,并且通过 npm 管理你分享的代码也很方便快捷和简单. 截至 ...

  3. node服务的监控预警系统架构

    需求背景 目前node端的服务逐渐成熟,在不少公司内部也开始承担业务处理或者视图渲染工作.不同于个人开发的简单服务器,企业级的node服务要求更为苛刻: 高稳定性.高可靠性.鲁棒性以及直观的监控和报警 ...

  4. node.js学习(三)简单的node程序&&模块简单使用&&commonJS规范&&深入理解模块原理

    一.一个简单的node程序 1.新建一个txt文件 2.修改后缀 修改之后会弹出这个,点击"是" 3.运行test.js 源文件 使用node.js运行之后的. 如果该路径下没有该 ...

  5. 细说WebSocket - Node篇

    在上一篇提高到了 web 通信的各种方式,包括 轮询.长连接 以及各种 HTML5 中提到的手段.本文将详细描述 WebSocket协议 在 web通讯 中的实现. 一.WebSocket 协议 1. ...

  6. 高大上的微服务可以很简单,使用node写微服务

    安装 npm install m-service --save 使用 编写服务处理函数 // dir1/file1.js // 使用传入的console参数输出可以自动在日志里带上request id ...

  7. 构建通用的 React 和 Node 应用

    这是一篇非常优秀的 React 教程,这篇文章对 React 组件.React Router 以及 Node 做了很好的梳理.我是 9 月份读的该文章,当时跟着教程做了一遍,收获很大.但是由于时间原因 ...

  8. 利用Node.js的Net模块实现一个命令行多人聊天室

    1.net模块基本API 要使用Node.js的net模块实现一个命令行聊天室,就必须先了解NET模块的API使用.NET模块API分为两大类:Server和Socket类.工厂方法. Server类 ...

  9. Node.js:进程、子进程与cluster多核处理模块

    1.process对象 process对象就是处理与进程相关信息的全局对象,不需要require引用,且是EventEmitter的实例. 获取进程信息 process对象提供了很多的API来获取当前 ...

  10. Node.js:理解stream

    Stream在node.js中是一个抽象的接口,基于EventEmitter,也是一种Buffer的高级封装,用来处理流数据.流模块便是提供各种API让我们可以很简单的使用Stream. 流分为四种类 ...

随机推荐

  1. vue-Treeselect 使用备注

    <head> <!-- include Vue 2.x --> <script src="https://cdn.jsdelivr.net/npm/vue@@^ ...

  2. C++的开源跨平台日志库glog学习研究(一)

    作为C++领域中为数不多的好用.高效的.跨平台的日志工具,Google的开源日志库glog也算是凤毛麟角了.glog 是一个C++实现的应用级日志记录框架,提供了C++风格的流操作. 恰巧趁着五一我也 ...

  3. 【Java并发编程】:volatile变量修饰符

    volatile用处说明     在JDK1.2之前,java的内存模型实现总是从主存(即共享内存)读取变量,是不需要进行特别的注意的.而随着JVM的成熟和优化,现在在多线程环境下volatile关键 ...

  4. 【链表】Linked List Cycle II

    题目: Given a linked list, return the node where the cycle begins. If there is no cycle, return null. ...

  5. Android版本分布——2017年5月更新

    Code Name Version API Level Last month This month Change gingerbread(姜饼) 2.3.3——2.3.7 10 0.9% 1.0% 0 ...

  6. 一个非常好用的图片切割工具(c# winform开发)

    本人业余时间开发了一个图片切割工具,非常好用,也很灵活! 特别对大型图片切割,更能体现出该软件的优势! 功能说明 可以设定切割的高度和宽度.切割线可以上下拖动,可以增加一个切割区域,可设定某个区域不参 ...

  7. 面向UI编程框架:ui.js框架思路详细设计

    由于上一次的灵光一闪,萌生了对面向UI编程的思想实现.经过一段时间的考虑和设计,现在将思想和具体细节记录下来: 具体思路描述: 在UI.config文件中,配置所有参数,比如页面模板.所有组件.组件控 ...

  8. Chapter 3 Phenomenon——13

    "Bella, I'm so sorry!""I'm fine, Tyler — you look awful, are you all right?" “Be ...

  9. 4-nginx-反向代理到tomcat及负载均衡

    反向代理相比于正向代理, 比如使用搬瓦工时, 就是位于客户端的正想代理, 而反向代理则是服务器端的代理, 主要用于实现请求分发, 负载均衡等功能 正向代理推荐一个: 搬瓦工, 比较好用.. 反向代理主 ...

  10. c#基础学习(0709)之vs通过抽象方法实现多态

    抽象类不能用来实例化对象 1.抽象类中可以有实例成员,也可以有抽象成员 2.抽象成员不能有任何实现 3.抽象类.抽象成员必须包含在抽象类中 4.抽象类不能用来实例化对象,既然抽象类不能被实例化,那么抽 ...