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-parsermulter来处理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介绍——阮一峰

0 0