//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. eolinker接口测试平台的安装部署

    1.从GitHub下载安装包: https://github.com/eolinker/CHN-EOLINKER-AMS-Lite-4.0-For-Java 使用 git clone https:// ...

  2. [webpack]path、publicPath、--content-base 理解

    附源码:http://files.cnblogs.com/files/chenshao/startPublic.rar 'use strict'; var webpack = require('web ...

  3. HTML BODY 背景图片

    内嵌: background:url(背景图片路径)  no-repeat;/*不重复默认在左上方*/ background:url(背景图片路径)  no-repeat center;/*不重复背景 ...

  4. Android4.0 Launcher 源码分析3——WorkSpace结构(滑动)

    3.WorkSpace结构(滑动) 桌面的左右滑动功能主要是在PagedView类中实现的,而WorkSpace是PagedView类的子类,所以会继承PagedView中的方法.当我们的手指点击Wo ...

  5. 为android游戏开发-准备的地图编辑器-初步刷地图

    采用多文理混合,单页面支持8张文理进行刷绘

  6. 根据屏幕尺寸计算rem

    !(function (doc, win) { var docEle = doc.documentElement, evt = "onorientationchange" in w ...

  7. 假如想要建设一个能承受500万PV/每天的网站,服务器每秒要处理多少个请求才能应对?

    假如想要建设一个能承受500万PV/每天的网站,服务器每秒要处理多少个请求才能应对?如何计算? 1.PV是什么:PV是page view的简写.PV是指页面的访问次数,每打开或刷新一次页面,就算做一个 ...

  8. eclipse中explorer显示方式

    不知道是不是上面的描述.做个记录 project explorer 项目资源管理器 这个要打开代码目录需要再点开java resources 还会出现deployment Descriptor项目工程 ...

  9. mysql RR下不存在则插入

    主要看并发事务中不存在则插入(只有key索引)的阻塞情况. 表定义: mysql> desc user; +-------------+------------------+------+--- ...

  10. C#将Dll嵌入到EXE

    感谢博主的方法: https://blog.csdn.net/lin381825673/article/details/39122257 我之前也看了网上的其他的方法试了都不行 第一种方法就是说用IL ...