3

express介绍

如有不详细或者不正确的地方多多指正。

我们可以拿js与jquery关系来类比一下:

jQuery是JS在浏览器环境下的封装库,把DOM操作,ajax等封装成了兼容性好,方便使用的方法
node是JS的一个非浏览器运行平台,里面提供API进行web服务器开发,封装了node关于web的一些API

两者有相同之处,express和jQuery都是对自己平台(node,DOM API)进行了封装
两者有不同之处,功能范畴完全不一样。express开发服务器,jquery做浏览器端操作。

express可以通过官方提供的命令行进行安装,官方目前默认的界面文件用jade格式,建议修改为pug格式的文件(jade版权问题) ,同时要在package.json中安装对应的npm包和app.js app.set('view engine', 'pug')设置对应的界面引擎解释器。

路由

get请求

路由的使用首先要引入express的路由模块,express官网的一个简单的get请求路由示例

var express = require('express');
var app = express();

// respond with "hello world" when a GET request is made to the homepage
app.get('/', function(req, res) {
  res.send('hello world');
});

post请求

post请求首先要引入bodyparse中间件,它用于解析客户端请求中的body中的内容,
使用express应用生成器生成一个网站,它默认已经使用了 bodyParser.json 与 bodyParser.urlencoded 的解析功能,除了这两个,bodyParser还支持对text、raw的解析。

app.use(bodyParser.json())bodyParser.json是用来解析json数据格式的
app.use(bodyParser.urlencoded({ extended: false }))bodyParser.urlencoded则是用来解析我们通常的form表单提交的数据,也就是请求头中包含这样的信息: Content-Type: application/x-www-form-urlencoded;

extended:如果设置为false,那么对URL-encoded的数据的解析采用querystring库,如果设置为true那么采用qs库((querystring和qs的不同))

// home.pug
$.ajax({
    url:userPath+"/userinfo-company",
    data:{
        module:'user',
        userId:userId
    },
    type:"POST",
    success:function(res){
        alert(res);
    },
    error:function(error){
        console.log(error);
    }
});

// index.js

var bodyParser = require('body-parser');  // bodyparser中间件
<!--app.use(bodyParser.json());-->   // bodyParser.json是用来解析json数据格式的
<!--app.use(bodyParser.urlencoded({ extended: false })); -->   // bodyParser.urlencoded则是用来解析我们通常的form表单提交的数据,也就是请求头中包含这样的信息: Content-Type: application/x-www-form-urlencoded
router.post('/userinfo-company', function(req, res, next) {
    var module = req.body.module;
    var userid = req.body.userId;
    request(
        { 
            url: nodeApi + '/menu/getInfo',
            method: 'POST',
            form: {
                module: module,
                userId: userid
            }
        },
        function(error,response,body) {
            if( response.statusCode == 200 ) {
                var tempArr = JSON.parse(body);
            }
        }
    );
})

安全性问题后台无法读取到cookie,后面将请求菜单的方法放在了js中,然后在将菜单传到路由中,通过res.render进行动态渲染

router.post('/menu', function(req, res, next) {
    menuArr = JSON.parse(req.body.menuArr);
    res.send('OK');
    
});

后面发现可以传递cookie,但未在项目中使用

默认情况下,cookies是禁用的。在defaults或options将jar设为true,使后续的请求都使用cookie.

var request = request.defaults({jar: true})
request('http://www.google.com', function () {
    request('http://images.google.com')
})

通过创建request.jar()的新实例,可以使用定制的cookie,而不是request全局的cookie jar。

var j = request.jar()
var request = request.defaults({jar:j})
request('http://www.google.com', function () {
    request('http://images.google.com')
})

或者

var j = request.jar()
var cookie = request.cookie('your_cookie_here')
j.setCookie(cookie, uri, function (err, cookie){})
request({url: 'http://www.google.com', jar: j}, function () {
    request('http://images.google.com')
})

注意,setCookie至少需要三个参数,最后一个是回调函数。

中间件

Express 是一个自身功能极简,完全是由路由和中间件构成一个的web开发框架:从本质上来说,一个 Express 应用就是在调用各种中间件。中间件(Middleware)是一个函数,如果当前中间件没有终结请求-响应循环,则必须调用next()方法将控制权交给下一个中间件,否则请求就会挂起。

中间件分为:应用级中间件,路由级中间件,错误处理中间件,内置中间件,第三方中间件。

上面用的bodyParser是应用级的中间件,router是路由级的中间件,有关中间件更详细的内容参见express官网(express中间件

一些小的注意点

模板引擎前面的缩进要么是空格或者是tab,如果两者混用会报错。

express更改路由中的内容的时候必须要重启本地服务器。只需要全局安装supervisor,然后命令行supervisor app.js就可以自动重启。


数字字母下划线
368 声望7 粉丝