express学习手记

学习并记录基于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.js

var 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/json
app.use(bodyParser.urlencoded({ extended: true })); // for parsing application/x-www-form-urlencoded
app.use(multer()); // for parsing multipart/form-data

app.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
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值