express node.js express

安装:

新版本中命令行工具分家了

npm install-g express//安装 express

然后

npm install-g express-generator//安装 express 命令行工具

express -V

我现在查看到的版本是 4.9.0

npm start  代替  node app.js  启动

http.Server

var http = require(‘http’);

var server = http.createServer(callback); 返回一个http.Server实例

属性:

server.maxHeadersCount    最大请求头数目限制, 默认 1000 个. 如果设置为0, 则代表不做任何限制

方法:

server.listnen(prot)            监听一个端口

server.close(callback)          禁止服务端接收新的连接

server.setTimeout(msecs_Time, callback) 设置套接字的超时值

事件:

‘request’ 每收到一个HTTP请求时触发, http.createServer的参数默认就是此事件的处理程序. 提供2个参数: req, res 分别是http.ServerRequest 和 http.ServerResponse 的实例. 表示请求和响应消息

‘connection’ 新的TCP建立时触发. 提供1个 socket 参数 net.Socket 实例

‘close’ 服务器关闭时触发 无参

http.ServerRequest

HTTP请求的消息, 一般由 http.Server的 request 事件发送.

HTTP 请求分: 请求头.  请求体

事件:

‘data’    请求体数据来到时. 参数 chunk 表示接收到的数据

’end’     请求体数据传输完成时

’close’ 用户当前请求结束时

属性:

complete      客户端请求是否已经发送完成

httpVersion  HTTP 协议版本,通常是 1.0 或 1.1

method  HTTP 请求方法,如 GET、POST、PUT、DELETE 等

url      原始的请求路径,例如 /static/image/x.jpg 或 /user?name=byvoid

headers  HTTP 请求头

trailers  HTTP 请求尾(不常见)

connection  当前 HTTP 连接套接字,为 net.Socket 的实例

socket  connection 属性的别名

client  client 属性的别名

params          多路由控制时的对象

http.ServerResponse

HTTP响应消息是返回给客户端的信息,决定了用户最终看到的结果

函数

res.writeHead(statusCode, [headers])  该函数在一次请求中最多调用一次. statusCode, 是HTTP状态码. 如200,404.  headers 类似数组的对象,表示响应头的每个属性

res.write(data, [encoding])          发送响应内容, 如果是字符串,需要制定编码方式, 默认 utf-8

res.end(data, data, [encoding])      结束响应,告知客户端所有响应完成. 此函数必须调用一次

API

HTTP动词都是Express的方法. post 改、put 增、delete 删、get 查

GET

GET 根据请求路径来处理客户端发出的GET请求

app.get(path, [callback(request, response)])

ALL

ALL 以匹配所有的HTTP动词,也就是说它可以过滤所有路径的请求

app.all(path, [callback(request, response, next)])

USE

USE express调用中间件的方法,它返回一个函数. path默认为"/"

app.use([path], [callback(request, response, next)])

USE 不仅可以调用中间件,还可以根据请求的网址,返回不同的网页内容

app.use(function(request,response,next){if(request.url=="/"){response.send("Welcome to the homepage!");}else{next();}});app.use(function(request,response,next){if(request.url=="/about"){response.send("Welcome to the about page!");}else{next();}});app.use(function(request,response){response.send("404 error!");});

post

处理指定页面的post请求

app.post(path,function(req, res));

想要使用 body 需要安装中间件

npm install body-parser

npm install multer

调用

var bodyParser = require(‘body-parser’);

var multer = require(‘multer’);

app.use(bodyParser.json());

app.use(bodyParser.urlencoded({ extended: true }));

app.use(multer());

req.body 解析客户端的post请求参数

格式:req.body.参数名;

注意: 表单所发送的 post请求 Accept 和 ajax 的不一样

服务器 send 发回来的数据,ajax是数据, 表单会反映称网页

param/query/params

获取主机名、路径名.[这里的req就是回调函数中的第一个参数]

req.host 返回请求头里取的主机名(不包含端口号);

req.path 返回请求的URL的路径名

req.query 是一个对象,存储着get请求路径参数的对象属性

www.***.com/shoes?order=desc&shoe[color]=blue&shoe[type]=converse  网址

得到: { order: ‘desc’, shoe: { color: ‘blue’, type: ‘converse’ } }

req.param() 功能同上,不过是函数形式 req.param(‘order’) 返回 desc

// req.param('name') 还可以获取具有相应路由规则的请求对象app.get("/user/:name/",function(req,res){console.log(req.param("name"));res.send("使用req.param属性获取具有路由规则的参数对象值!");});

// req.params 同上,但可以匹配复杂命名路由规则的请求app.get("/user/:name/:id",function(req,res){console.log(req.params.id);});

send

send 方法向浏览器发送一个响应信息,并可以智能处理不同类型的数据 send方法在输出响应时会自动进行一些设置,比如HEAD信息、HTTP缓存支持等等 类型可以是: String, Array, Object, Number. 当参数为一个String时,Content-Type默认设置为"text/html" 当参数为Array或Object时,Express会返回一个JSON 当参数为一个NumberExpress会帮你设置一个响应体,比如:200

set

app.set(‘view engine’, ‘ejs’);  设置默认模板引擎

app.engine( ‘.html’, require( ‘ejs’ ).__express ); 修改模板引擎

"__express",ejs模块的一个公共属性,表示要渲染的文件扩展名

app.set(‘views’, __dirname);  设定views变量,意为视图存放的目录

express.static —— 指定静态文件的查找目录

app.use(express.static(require(‘path’).join(__dirname, ‘public’)));

模板操作:

app.set(‘views’, path.join(__dirname, ‘views’));

app.set(‘view engine’, ‘html’);

app.engine(’.html’, require(‘ejs’).__express);

这样模板后缀可以使 .html  但模板代码是ejs代码

render

何对网页模板进行访问. res对象的render函数

res.render(view, [locals], callback);

view 视图名, locals 为模板传入变量

redirect

允许网址的重定向,跳转到指定的url并且可以指定status,默认为302方式

根据指定url来重定向,可以域内路径、网页间跳转也可以跳转至不同域名

res.redirect([status], url);

res.redirect(“login”);

Middleware<中间件>

中间件(middleware)就是处理HTTP请求的函数,用来完成各种特定的任务,比如检查用户是否登录、分析数据、以及其他在需要最终将数据发送给用户之前完成的任务。 它最大的特点就是,一个中间件处理完,可以把相应数据再传递给下一个中间件。

//连续调用2个中间件app.use(function(request,response,next){console.log("method:"+request.method+" ==== "+"url:"+request.url);next();});app.use(function(request,response){response.writeHead(200,{"Content-Type":"text/html;charset=utf-8"});response.end('示例:连续调用两个中间件');});

由于这种原因,所以调用中间件的顺序非常重要

设定静态文件目录的访问路径

express.static(path.join(__dirname, ‘/public’))

express-session

varsession=require('express-session');app.use(session({secret:'secret',resave:true,saveUninitialized:false,cookie:{maxAge:1000*60*10//过期时间设置(单位毫秒)}}));//新增中间件并设置模板变量值app.use(function(req,res,next){res.locals.user=req.session.user;varerr=req.session.error;res.locals.message='';if(err)res.locals.message='

'+err+'

';next();});

body-parser

npm install body-parser

npm install multer调用varbodyParser=require('body-parser');varmulter=require('multer');......app.use(bodyParser.json());app.use(bodyParser.urlencoded({extended:true}));app.use(multer());

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,937评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,503评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,712评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,668评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,677评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,601评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,975评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,637评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,881评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,621评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,710评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,387评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,971评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,947评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,189评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,805评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,449评论 2 342

推荐阅读更多精彩内容