express简单总结

express介绍

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

咱们能够拿js与jquery关系来类比一下:node

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

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

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

路由

get请求

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

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的解析。npm

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

extended:若是设置为false,那么对URL-encoded的数据的解析采用querystring库,若是设置为true那么采用qs库((querystring和qs的不一样))segmentfault

// 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就能够自动重启。

相关文章
相关标签/搜索