express学习手记
来源:互联网 发布:组装电脑上淘宝买配件 编辑:程序博客网 时间:2024/05/01 12:36
学习并记录基于nodejs的express框架。什么是express呢?
基于 Node.js 平台,快速、开放、极简的 web 开发框架
安装
本次学习不采用全局安装,首先创建一个文件夹并进入,打开cmd,键入npm install express --save
,回车安装express。
安装 Node 模块时,–save 参数可将此模块将被添加到 package.json(package.json的介绍) 文件中 dependencies 依赖列表中。
Hello World
创建helloWorld.js,写入以下代码:
var express = require('express');//加载express模块var app = express();//创建express实例app.get('/', function (req, res) { res.send('hello World!');});var server = app.listen(3000, function () { console.log('Example app listening at http://localhost:3000);});
待命令行显示Example app listening at http://localhost:3000
后,在浏览器地址栏中输入localhost:3000
便会看到熟悉的hello world
了。
接下来记录一些express的常用属性及方法:
application
上文中的app即为application,下面介绍一些常用的方法:
1. app.use([path,] function [, function…])
用来注册express中间件,什么意思呢?简单来说就是处理http请求的。
怎么理解呢?直接上代码:
var express = require('express');var app = express();app.use(function(req,res,next){ console.log('中间件'); next();})app.get('/', function (req, res) { console.log('hello World') res.send('hello World!');});var server = app.listen(3000, function () { console.log('Example app listening at http://localhost:3000');});
在app创建后注册一个中间件,此时访问localhost:3000
,命令行打印如下:
注意中间件最后一行next()
,如果没有这句代码,程序将会阻塞。第一个可选参数path用来指定中间件要处理的http请求地址。如:
app.use('/user',function(req,res,next){ console.log('我只处理/user'); next();})
个人理解:拦截http请求并处理,处理完成之后通过next()放行;
app.get和app.post是app.use的特殊处理。path也可以用模式匹配和正则匹配:
//模式匹配:冒号后的‘变量’可以用req.params获取app.use('/user/:id',function(req,res,next){ console.log(req.params.id) next();})//正则匹配app.use(/^\/(a.*)/,function(req,res,next){//匹配以a开头的地址,加括号可以在req.params中获取匹配结果。 console.log(req.params)// next();})
2. app.get(path, callback [, callback …])
可以简单的理解为设置一个get请求,path为路径,callback为当调用这个接口时的处理函数。
3. app.post(path, callback [, callback …])
设置post请求,参考上方。
4. app.listen(port, [hostname], [backlog], [callback])
监听port端口
5. 模板引擎
- app.set(‘view engine’, value):设置view engine
属性为你要使用的模板引擎值。
- app.engine(ext, callback):根据相应的模板引擎设置后缀和处理函数。
设置ejs:
var ejs = require('ejs');app.engine('.html', ejs.__express);app.set('view engine', 'html')app.set("views", process.cwd());//设置视图文件所在路径
完整示例:
//ejs.jsvar express = require("express");var ejs = require('ejs');var app = express();app.engine('.html', ejs.__express);app.set('view engine', 'html')app.set("views", app.path()); app.use(function(req, res, next) { res.locals.userinfo = {//res.locals设置本地变量,生命周期为本次请求有效。相对性的app.locals则是贯穿全局。 username : "peter" }; next();});app.get("/", function(req, res) { var list = [1, 2, 4, 5, 5, 7, 8]; res.render("ejsTemp", {title : "ejs测试", list : list});});app.listen(4000);//ejsTemp.html<!DOCTYPE html><html><head> <meta charset="UTF-8"> <title><%=title%></title></head><body> <%= userinfo.username%> <ul> <%for(var i = 0 ; i < list.length ; i++) {%> <li><%= list[i]%></li> <%}%> </ul></body></html>
更多有关ejs的内容,烦请自行搜索。
request
request(以下简称req)对象表示一个HTTP请求,并包含一些请求时携带的属性。
1. req.body
请求体,可以配合body-parser
和multer
来处理post请求提交的参数。官方demo:
var app = require('express')();var bodyParser = require('body-parser');var multer = require('multer'); app.use(bodyParser.json()); // for parsing application/jsonapp.use(bodyParser.urlencoded({ extended: true })); // for parsing application/x-www-form-urlencodedapp.use(multer()); // for parsing multipart/form-dataapp.post('/', function (req, res) { console.log(req.body); res.json(req.body);})
2. req.query
包含get请求url后的参数对象。例如URL为locahost:3000/user?username=peter&password=123456
,那么req.query.username
就是peter
3. req.cookies
结合cookie-parser
模块可以操作cookie
var express = require('express');var cookie = require('cookie-parser');var app = express();app.use(cookie())
之后便可在路由中以req.cookies.key
操作cookie了
response
response(以下简称res)表示HTTP请求响应对象。
1. res.cookie(name, value [,options])
设置cookie:
res.cookie('username', 'peter',{'maxAge':30000});
2. res.clearCookie(name [,options])
删除指定cookie
res.clearCookie('username');
3. res.send([body])
返回json格式数据,参数可以是一个Buffer对象,一个字符串,一个对象,或者一个数组。当参数是对象或数组时,将已json格式返回。通过res.json([body])也可返回json数据。
res.send({username:'peter'});
4. res.redirect([status,] path)
重定向,可指定status
res.redirect('/user/login');
5. res.render(view [, locals] [, callback])
渲染视图并发送给客户端。view为项目视图(默认在views)目录下的文件。
6. res.set(field [, value])
设置响应头
res.set('Content-Type', 'text/plain');
最后,一些有帮助的链接,也是我学习express的地方:
express4.x API——未翻译的中文API
中文API——可以凑合着看。
express介绍——阮一峰
- express学习手记
- express 学习
- Visual C# .NET Express Beta 1 试用手记 1
- Node.js+NPM+Express+Socket.io安装手记
- Hibernate学习手记1
- Delphi学习手记
- Struts学习手记
- Hibernate学习手记(一)
- EAS 5.2 学习手记
- Hibernate学习手记(一)
- ace 学习手记 20050829
- sql server2000学习手记
- ireport & jasperreports 学习手记
- JavaScript 学习手记
- ASP学习手记
- ASP.NET 学习手记
- JSP 学习手记
- Samba 学习手记(1)
- 从程序员到项目经理(6):程序员加油站 -- 懂电脑更要懂人脑
- 去掉标题栏和全屏的三种方法
- oracle学习笔记 检查点队列(checkpoint queue)
- 卷积神经网络实战(可视化部分)——使用keras识别猫咪
- Servlet 通过表单上传文件和获取表单数据的最简单方式
- express学习手记
- ImageNet和CNN怎样帮助医学图像的识别
- NGUI 渲染流程深入研究 (UIDrawCall UIGeometry UIPanel UIWidget)
- 1002. 写出这个数 (20)
- eclipse离线安装PyDev
- CF Round #411 (Div. 2) Minimum number of steps
- Java8-Stream语法详解
- emacs工具使用快捷点及问题记录(持续)
- C++虚函数之虚函数表浅析