资讯专栏INFORMATION COLUMN

express简单总结

ivyzhang / 2863人阅读

摘要:介绍如有不详细或者不正确的地方多多指正。可以通过官方提供的命令行进行安装,官方目前默认的界面文件用格式,建议修改为格式的文件版权问题,同时要在中安装对应的包和设置对应的界面引擎解释器。

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中间件
   // bodyParser.json是用来解析json数据格式的
   // 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就可以自动重启。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/92537.html

相关文章

  • Web 实时推送技术的总结

    摘要:本文对过去和现在流行的实时推送技术进行了比较与总结。以上我们介绍了三种实时推送技术,然而各自的缺点很明显,使用起来并不理想,接下来我们着重介绍另一种技术它是比较理想的双向通信技术。 前言 随着 Web 的发展,用户对于 Web 的实时推送要求也越来越高 ,比如,工业运行监控、Web 在线通讯、即时报价系统、在线游戏等,都需要将后台发生的变化主动地、实时地传送到浏览器端,而不需要用户手动...

    Rocture 评论0 收藏0
  • [Java] 尝试词法分析器的总结

    摘要:写在前面由于我对写解析器只有阅读了几篇文章的知识量,因此水平并不是很高,此文权当一次个人总结,无法保证所涉及的知识点思路完全无误,如有错误,还请各位大佬指正。除此之外的状态都是不合法的,这也就是有时候解析类的包比如会看到的错误的情况。 写在前面 由于我对写解析器只有 阅读了几篇文章 的知识量,因此水平并不是很高,此文权当一次个人总结,无法保证所涉及的知识点、思路完全无误,如有错误,还请...

    flybywind 评论0 收藏0
  • 解读express 4.x源码(1)

    摘要:在后续的总结中,我会继续分析,并准备将一些值得分析的逐一解读,也会涉及一些。从一个官方示例开始这是官方给出的一个简单程序,运行后访问显示。第一行载入了框架,我们来看源代码中的。代码的开始定义了一个函数,函数有形参,,为回调函数。 这两天仔细看了看express的源码,对其的整个实现有了较清晰的认识,所以想总结一下写出来,如果有什么不对的地方,望指出。 这是第一篇,首先介绍一个最简单的...

    summerpxy 评论0 收藏0
  • 后端知识点总结——NODE.JS基础

    摘要:后端知识点总结基础不是是一种软件开发平台,它的竞争对象历史第一次有一种语言可以通吃前后端网站阿里云镜像版本年初年中年底最新版本功能强大可靠,适合大型企业级项目简单易用适合互联网项目易用适合平台性能好适合服务器端密集型项目不适合密集型项目密集 后端知识点总结——NODE.JS基础 1.Node.js Node.js不是JS,是一种软件开发平台,它的竞争对象JSP/PHP/ASP.NET...

    Freeman 评论0 收藏0
  • 从零开始编写React-Express单页博客应用(学习总结)

    摘要:单页博客应用编写总结很久之前就想写一个博客应用在一开始想要直接用和模板直接写但是暑假一开始的时候不小心入了的坑所以就一不做二不休直接用写那既然用了不写个单页应用也过意不去了不前前后后写了将近两个星期现在看来这其实是一个很容易的应用但是鉴于 React-Express单页博客应用编写总结 很久之前就想写一个博客应用.在一开始想要直接用express和ejs模板直接写, 但是暑假一开始的时...

    Jioby 评论0 收藏0

发表评论

0条评论

ivyzhang

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<