express_expression - CSDN
express 订阅
express是一个英语单词,名词、动词、形容词,作名词时意思是“快车,快递,专使;捷运公司”,作及物动词时意思是“表达;快递”,作形容词时意思是“明确的;迅速的;专门的”。 展开全文
express是一个英语单词,名词、动词、形容词,作名词时意思是“快车,快递,专使;捷运公司”,作及物动词时意思是“表达;快递”,作形容词时意思是“明确的;迅速的;专门的”。
信息
外文名
eXpress
词    性
名词、动词、形容词
eXpress单词发音
英[ɪkˈspres];美[ɪkˈspres] [1] 
收起全文
精华内容
参与话题
  • Nodejs之Express框架

    千次阅读 2019-06-03 10:13:27
    Nodejs之Express框架Express 简介安装 Express第一个 Express 框架实例请求和响应路由静态文件GET 方法POST 方法文件上传Cookie 管理 以下内容转载编辑自菜鸟教程 Express 简介 Express 是一个简洁而灵活的 node....

    以下内容转载编辑自菜鸟教程

    以下代码已上传至GitHub:https://github.com/tsora-c/node-express

    Express 简介

    Express 是一个简洁而灵活的 node.js Web应用框架, 提供了一系列强大特性帮助你创建各种 Web 应用,和丰富的 HTTP 工具。

    使用 Express 可以快速地搭建一个完整功能的网站。

    Express 框架核心特性:

    • 可以设置中间件来响应 HTTP 请求。
    • 定义了路由表用于执行不同的 HTTP 请求动作。
    • 可以通过向模板传递参数来动态渲染 HTML 页面。

    安装 Express

    安装 Express 并将其保存到依赖列表中:

    $ cnpm install express --save
    

    以上命令会将 Express 框架安装在当前目录的 node_modules 目录中, node_modules 目录下会自动创建 express 目录。以下几个重要的模块是需要与 express 框架一起安装的:

    • body-parser - node.js 中间件,用于处理 JSON, Raw, Text 和 URL 编码的数据。

    • cookie-parser - 这就是一个解析Cookie的工具。通过req.cookies可以取到传过来的cookie,并把它们转成对象。

    • multer - node.js 中间件,用于处理 enctype=“multipart/form-data”(设置表单的MIME编码)的表单数据。

    $ cnpm install body-parser --save
    $ cnpm install cookie-parser --save
    $ cnpm install multer --save
    

    安装完后,我们可以查看下 express 使用的版本号:

    $ cnpm list express
    /data/www/node
    └── express@4.15.2  -> /Users/tianqixin/www/node/node_modules/.4.15.2@express
    

    第一个 Express 框架实例

    接下来我们使用 Express 框架来输出 “Hello World”。

    以下实例中我们引入了 express 模块,并在客户端发起请求后,响应 “Hello World” 字符串。

    创建 express_demo.js 文件,代码如下所示:

    express_demo.js 文件代码:

    //express_demo.js 文件
    var express = require('express');
    var app = express();
     
    app.get('/', function (req, res) {
       res.send('Hello World');
    })
     
    var server = app.listen(8081, function () {
     
      var host = server.address().address
      var port = server.address().port
     
      console.log("应用实例,访问地址为 http://%s:%s", host, port)
     
    })
    

    执行以上代码:

    $ node express_demo.js 
    应用实例,访问地址为 http://0.0.0.0:8081
    

    在浏览器中访问 http://127.0.0.1:8081,结果如下图所示:
    在这里插入图片描述

    请求和响应

    Express 应用使用回调函数的参数: request 和 response 对象来处理请求和响应的数据。

    app.get('/', function (req, res) {
       // --
    })
    

    request 和 response 对象的具体介绍:

    Request 对象 - request 对象表示 HTTP 请求,包含了请求查询字符串,参数,内容,HTTP 头部等属性。常见属性有:

    • req.app:当callback为外部文件时,用req.app访问express的实例
    • req.baseUrl:获取路由当前安装的URL路径
    • req.body / req.cookies:获得「请求主体」/ Cookies
    • req.fresh / req.stale:判断请求是否还「新鲜」
    • req.hostname / req.ip:获取主机名和IP地址
    • req.originalUrl:获取原始请求URL
    • req.params:获取路由的parameters
    • req.path:获取请求路径
    • req.protocol:获取协议类型
    • req.query:获取URL的查询参数串
    • req.route:获取当前匹配的路由
    • req.subdomains:获取子域名
    • req.accepts():检查可接受的请求的文档类型
    • req.acceptsCharsets / req.acceptsEncodings / req.acceptsLanguages:返回指定字符集的第一个可接受字符编码
    • req.get():获取指定的HTTP请求头
    • req.is():判断请求头Content-Type的MIME类型

    Response 对象 - response 对象表示 HTTP 响应,即在接收到请求时向客户端发送的 HTTP 响应数据。常见属性有:

    • res.app:同req.app一样
    • res.append():追加指定HTTP头
    • res.set()在res.append()后将重置之前设置的头
    • res.cookie(name,value [,option]):设置Cookie
    • opition: domain / expires / httpOnly / maxAge / path / secure / signed
    • res.clearCookie():清除Cookie
    • res.download():传送指定路径的文件
    • res.get():返回指定的HTTP头
    • res.json():传送JSON响应
    • res.jsonp():传送JSONP响应
    • res.location():只设置响应的Location HTTP头,不设置状态码或者close response
    • res.redirect():设置响应的Location HTTP头,并且设置状态码302
    • res.render(view,[locals],callback):渲染一个view,同时向callback传递渲染后的字符串,如果在渲染过程中有错误发生next(err)将会被自动调用。callback将会被传入一个可能发生的错误以及渲染后的页面,这样就不会自动输出了。
    • res.send():传送HTTP响应
    • res.sendFile(path [,options] [,fn]):传送指定路径的文件 -会自动根据文件extension设定Content-Type
    • res.set():设置HTTP头,传入object可以一次设置多个头
    • res.status():设置HTTP状态码
    • res.type():设置Content-Type的MIME类型

    路由

    我们已经了解了 HTTP 请求的基本应用,而路由决定了由谁(指定脚本)去响应客户端请求。

    在HTTP请求中,我们可以通过路由提取出请求的URL以及GET/POST参数。

    接下来我们扩展 Hello World,添加一些功能来处理更多类型的 HTTP 请求。

    创建 express_demo2.js 文件,代码如下所示:

    express_demo2.js 文件代码:

    var express = require('express');
    var app = express();
     
    //  主页输出 "Hello World"
    app.get('/', function (req, res) {
       console.log("主页 GET 请求");
       res.send('Hello GET');
    })
     
     
    //  POST 请求
    app.post('/', function (req, res) {
       console.log("主页 POST 请求");
       res.send('Hello POST');
    })
     
    //  /del_user 页面响应
    app.get('/del_user', function (req, res) {
       console.log("/del_user 响应 DELETE 请求");
       res.send('删除页面');
    })
     
    //  /list_user 页面 GET 请求
    app.get('/list_user', function (req, res) {
       console.log("/list_user GET 请求");
       res.send('用户列表页面');
    })
     
    // 对页面 abcd, abxcd, ab123cd, 等响应 GET 请求
    app.get('/ab*cd', function(req, res) {   
       console.log("/ab*cd GET 请求");
       res.send('正则匹配');
    })
     
     
    var server = app.listen(8081, function () {
     
      var host = server.address().address
      var port = server.address().port
     
      console.log("应用实例,访问地址为 http://%s:%s", host, port)
     
    })
    

    执行以上代码:

    $ node express_demo2.js 
    

    应用实例,访问地址为 http://0.0.0.0:8081
    接下来你可以尝试访问 http://127.0.0.1:8081 不同的地址,查看效果。

    在浏览器中访问 http://127.0.0.1:8081/list_user,结果如下图所示:

    在这里插入图片描述
    在浏览器中访问 http://127.0.0.1:8081/abcd,结果如下图所示:
    在这里插入图片描述

    在浏览器中访问 http://127.0.0.1:8081/abcdefg,结果如下图所示:
    在这里插入图片描述

    静态文件

    Express 提供了内置的中间件 express.static 来设置静态文件如:图片, CSS, JavaScript 等。

    你可以使用 express.static 中间件来设置静态文件路径。例如,如果你将图片, CSS, JavaScript 文件放在 public 目录下,你可以这么写:

    app.use('/public', express.static('public'));
    

    我们可以到 public/images 目录下放些图片,如下所示:

    node_modules
    server.js
    public/
    public/images
    public/images/logo.png
    

    让我们再修改下 “Hello World” 应用添加处理静态文件的功能。

    创建 express_demo3.js 文件,代码如下所示:

    express_demo3.js 文件代码:

    var express = require('express');
    var app = express();
     
    app.use('/public', express.static('public'));
     
    app.get('/', function (req, res) {
       res.send('Hello World');
    })
     
    var server = app.listen(8081, function () {
     
      var host = server.address().address
      var port = server.address().port
     
      console.log("应用实例,访问地址为 http://%s:%s", host, port)
     
    })
    

    执行以上代码:

    $ node express_demo3.js 
    

    应用实例,访问地址为 http://0.0.0.0:8081
    执行以上代码:

    在浏览器中访问 http://127.0.0.1:8081/public/images/logo.png(本实例采用了菜鸟教程的 logo),结果如下图所示:
    在这里插入图片描述

    GET 方法

    以下实例演示了在表单中通过 GET 方法提交两个参数,我们可以使用 server.js 文件内的 process_get 路由器来处理输入:

    index.htm 文件代码:

    <html>
    <body>
    <form action="http://127.0.0.1:8081/process_get" method="GET">
    First Name: <input type="text" name="first_name">  <br>
     
    Last Name: <input type="text" name="last_name">
    <input type="submit" value="Submit">
    </form>
    </body>
    </html>
    

    server.js 文件代码:

    var express = require('express');
    var app = express();
     
    app.use('/public', express.static('public'));
     
    app.get('/index.htm', function (req, res) {
       res.sendFile( __dirname + "/" + "index.htm" );
    })
     
    app.get('/process_get', function (req, res) {
     
       // 输出 JSON 格式
       var response = {
           "first_name":req.query.first_name,
           "last_name":req.query.last_name
       };
       console.log(response);
       res.end(JSON.stringify(response));
    })
     
    var server = app.listen(8081, function () {
     
      var host = server.address().address
      var port = server.address().port
     
      console.log("应用实例,访问地址为 http://%s:%s", host, port)
     
    })
    

    执行以上代码:

    $ node server.js 
    

    应用实例,访问地址为 http://0.0.0.0:8081
    浏览器访问 http://127.0.0.1:8081/index.htm,如图所示:

    在这里插入图片描述
    现在你可以向表单输入数据,并提交,如下演示:
    在这里插入图片描述

    POST 方法

    以下实例演示了在表单中通过 POST 方法提交两个参数,我们可以使用 server.js 文件内的 process_post 路由器来处理输入:

    index.htm 文件代码:

    <html>
    <body>
    <form action="http://127.0.0.1:8081/process_post" method="POST">
    First Name: <input type="text" name="first_name">  <br>
     
    Last Name: <input type="text" name="last_name">
    <input type="submit" value="Submit">
    </form>
    </body>
    </html>
    

    server.js 文件代码:

    var express = require('express');
    var app = express();
    var bodyParser = require('body-parser');
     
    // 创建 application/x-www-form-urlencoded 编码解析
    var urlencodedParser = bodyParser.urlencoded({ extended: false })
     
    app.use('/public', express.static('public'));
     
    app.get('/index.htm', function (req, res) {
       res.sendFile( __dirname + "/" + "index.htm" );
    })
     
    app.post('/process_post', urlencodedParser, function (req, res) {
     
       // 输出 JSON 格式
       var response = {
           "first_name":req.body.first_name,
           "last_name":req.body.last_name
       };
       console.log(response);
       res.end(JSON.stringify(response));
    })
     
    var server = app.listen(8081, function () {
     
      var host = server.address().address
      var port = server.address().port
     
      console.log("应用实例,访问地址为 http://%s:%s", host, port)
     
    })
    

    执行以上代码:

    $ node server.js
    

    应用实例,访问地址为 http://0.0.0.0:8081
    浏览器访问 http://127.0.0.1:8081/index.htm,如图所示:
    在这里插入图片描述

    现在你可以向表单输入数据,并提交,如下演示:
    在这里插入图片描述

    文件上传

    以下我们创建一个用于上传文件的表单,使用 POST 方法,表单 enctype 属性设置为 multipart/form-data。

    index.htm 文件代码:

    <html>
    <head>
    <title>文件上传表单</title>
    </head>
    <body>
    <h3>文件上传:</h3>
    选择一个文件上传: <br />
    <form action="/file_upload" method="post" enctype="multipart/form-data">
    <input type="file" name="image" size="50" />
    <br />
    <input type="submit" value="上传文件" />
    </form>
    </body>
    </html>
    

    server.js 文件代码:

    var express = require('express');
    var app = express();
    var fs = require("fs");
     
    var bodyParser = require('body-parser');
    var multer  = require('multer');
     
    app.use('/public', express.static('public'));
    app.use(bodyParser.urlencoded({ extended: false }));
    app.use(multer({ dest: '/tmp/'}).array('image'));
     
    app.get('/index.htm', function (req, res) {
       res.sendFile( __dirname + "/" + "index.htm" );
    })
     
    app.post('/file_upload', function (req, res) {
     
       console.log(req.files[0]);  // 上传的文件信息
     
       var des_file = __dirname + "/" + req.files[0].originalname;
       fs.readFile( req.files[0].path, function (err, data) {
            fs.writeFile(des_file, data, function (err) {
             if( err ){
                  console.log( err );
             }else{
                   response = {
                       message:'File uploaded successfully', 
                       filename:req.files[0].originalname
                  };
              }
              console.log( response );
              res.end( JSON.stringify( response ) );
           });
       });
    })
     
    var server = app.listen(8081, function () {
     
      var host = server.address().address
      var port = server.address().port
     
      console.log("应用实例,访问地址为 http://%s:%s", host, port)
     
    })
    

    执行以上代码:

    $ node server.js 
    

    应用实例,访问地址为 http://0.0.0.0:8081
    浏览器访问 http://127.0.0.1:8081/index.htm,如图所示:
    在这里插入图片描述

    现在你可以向表单输入数据,并提交,如下演示:
    在这里插入图片描述

    Cookie 管理

    我们可以使用中间件向 Node.js 服务器发送 cookie 信息,以下代码输出了客户端发送的 cookie 信息:

    express_cookie.js 文件代码:

    // express_cookie.js 文件
    var express      = require('express')
    var cookieParser = require('cookie-parser')
    var util = require('util');
     
    var app = express()
    app.use(cookieParser())
     
    app.get('/', function(req, res) {
        console.log("Cookies: " + util.inspect(req.cookies));
    })
     
    app.listen(8081)
    

    执行以上代码:

    $ node express_cookie.js 
    

    现在你可以访问 http://127.0.0.1:8081 并查看终端信息的输出,如下演示:

    在这里插入图片描述

    展开全文
  • Express介绍和安装及使用

    万次阅读 2019-02-11 09:16:04
    一、Express介绍和安装 (1)先在全局安装express模块 npm install express -g /*输入下述命令,如果有提示,说明安装好了*/ express -h /*如果提示错误,需要安装express-generator*/ npm install express-...

    一、Express介绍和安装

    (1)先在全局安装express模块

    npm install express -g
    /*输入下述命令,如果有提示,说明安装好了*/
    
    express -h
    
    /*如果提示错误,需要安装express-generator*/
    
    npm install express-generator -g
    
    

    (2)在使用express快速搭建一个项目初始化模板

    express -e expressDemo
    
    /*进入目录*/
    cd express
    /*下载依赖模块*/
    npm install
    

    (3)启动expressDemo程序 

    //查看程序
    http://localhost:3000/
    
    //启动项目
    npm start
    

    二、初始化项目详解

    packpage.json 

    入口文件 /bin/www

    三、Express中的路由

    可以自动编译

    supervisor ./bin/www
    

    修改routes/users.js

    var express = require('express');
    var router = express.Router();
    
    /* GET users listing. */
    router.get('/', function(req, res, next) {
      res.send('respond with a resource');
      //不能够进行第二次send,会崩溃
    });
    router.get("/list", function(req, res, next){
    	res.send('user list');
    });
    
    //还可以写正则表达式
    router.get("/ab*cd", function(req, res, next){
    	res.send("regexp");
    })
    
    //加载form表单页面
    router.get("/form", function(req, res){
    	res.sendFile(__dirname + "/form.html");
    })
    
    router.post("/save", function(req, res){
    	res.send("表单提交");
    })
    //同时接收get和post请求
    router.all("/all", function(req, res){
    	res.send("all");
    })
    
    module.exports = router;
    
    
    

    同目录下新增form.html

    <!DOCTYPE html>
    <html lang="en">
    	<head>
    		<meta charset="UTF-8">
    		<title>Document</title>
    	</head>
    	<body>
    		<form action="/users/save" method = "post">
    			<input type="text" value = "" name = "username" />
    			<input type="submit" value = "提交" name = "submit" />
    		</form>
    	</body>
    </html>
    

    四、使用EJS模板

    1、什么叫做EJS模板

        EJS是一个简单高效的模板语言,通过数据和模板,可以生成HTML标记文本。可以说EJS是一个JavaScript库,EJS可以同时运行在客户端和服务器端,客户端安装直接引入文件即可,服务器端用npm包安装。

    2、EJS的特点

    a.快速编译和渲染
    b.简单的模板标签
    c.自定义标记分隔符
    d.支持文本包含
    e.支持浏览器端和服务器端
    f.支持express视图系统

    3、EJS的成员函数

    Render(str,data,[option]);
    /*
        直接渲染字符串并生成html
        str: 需要解析的字符串模板
        data: 数据
        option: 配置选项
    */
    

    4、EJS的常用标签

    a. <% %> 流程控制标签
    b. <%= %> 输出标签(原文输出HTML标签)
    c. <%- %>输出标签(HTML会被浏览器解析)
    d.<%# %>注释标签
    e.% 对标记进行转义

    5、实战(在express项目中内置了EJS模块)

    6、Includes

    <ul>
      <%- include("head.ejs") %>
    </ul>
    

     

    展开全文
  • express基本用法

    万次阅读 2019-06-02 09:15:26
    express const express = require('express') const app = express() app.listen(8080, () =&gt; { console.log('port created successfully') }) express会把所有的请求方式都作为方法挂载到app对象中,...

    express

    const express = require('express')
    const app = express()
    app.listen(8080, () => {
      console.log('port created successfully')
    })
    

    express会把所有的请求方式都作为方法挂载到app对象中,客户端发送请求并且会执行对应的回调函数

    const express = require('express')
    const app = express()
    app.get('/', (req, res, next) => {
        res.send("ok")
    })
    app.listen(8080, () => {
      console.log('port created successfully')
    })
    

    接收GET数据

    const express = require('express')
    const app = express()
    app.get('/', (req, res, next) => {
        let GET = req.query
        console.log(GET)
        res.send("ok")
    })
    app.listen(8080, () => {
      console.log('port created successfully')
    })
    

    接收POST数据

    const bodyParser = require(body-parser)
    const express = require('express')
    const app = express()
    app.use(bodyParser.urlencoded({ extended: false }))
    app.get('/', (req, res, next) => {
        let POST = req.body
        console.log(POST)
        res.send("ok")
    })
    app.listen(8080, () => {
      console.log('port created successfully')
    })
    

    处理session

    const cookieSession = require('cookie-session')
    const express = require('express')
    const app = express()
    app.use(cookieSession({
      name: 'session',
      keys: ['key1', 'key2']
    }))
     
    app.get('/', function (req, res, next) {
      req.session.views = 1
      res.send("ok")
    })
     
    app.listen(3000)
    

    路由处理

    //https://xxx.com/user/1.html
    //https://xxx.com/user/2.html
    
    const routerUser = express.Router()
    app.use("/user", routerUser)
    routerUser.get("/1.html", function (req, res) {
      res.send("1")
    })
    routerUser.get("/2.html", function (req, res) {
      res.send("2")
    })
    

    模板适配

    const consolidate = require('consolidate')
    app.set("view engine", "html");
    app.set("view", "./template");
    app.engine("html", consolidate.ejs)
    
    app.get('/', function () {
      res.render("index.ejs", {})
    })
    

    处理文件

    app.use(express.static('./dist'))
    

    处理404

    app.use((req, res, next) => {
      res.sendFile(path.resolve(__dirname, './404.html'))
    })
    

    在这里插入图片描述

    展开全文
  • nodejs之express详解

    万次阅读 2018-06-27 14:17:27
    express github地址:https://github.com/expressjs/express文档地址:http://expressjs.com/en/4x/api.html#routerhttps://www.expressjiaocheng.com/doc-x4.html#appexpress 的几大模块:express()、Application、...

    express  github地址:https://github.com/expressjs/express

    文档地址:http://expressjs.com/en/4x/api.html#router

    https://www.expressjiaocheng.com/doc-x4.html#app

    express 的几大模块:

    express()、Application、Request、Response、Router

    英语官网:http://expressj s. com/

    中文官网:http://www.expressj s.com.cn/

    ht t p: //www. expressjiaocheng . com

    ********安装express**********

    1.cd到项目里

    2.创建package.json:      npm init --yes 

    package.json说明https://blog.csdn.net/zmrdlb/article/details/53190696

    3.安装 Express 框架,npm install express --save 
    --save 参数表示吧express模块写到package.json 中,表示自动修改 package.json 文件,自动添加依赖项。


    *****动态路由:

    浏览器请求:http://192.168.99.10:8081/one/123

      app.get('/one/:aid',function (req, res) {

    console.log(req.params.aid);结果123

    }

    *******get请求*******

    浏览器请求:http://192.168.99.10:8081/one?www=123

     app.get('/one',function (req, res) {

    console.log(req.query.www);结果123

    }

    ***********Express中使用ej模板引擎

    var express = require("express");
    var app = express();
    app.set("view engine","ejs");//设置ejs为模板引擎

    //渲染news页面,第二个参数是传递的数据
                   res.render("news",{
             "news" : ["我是小新闻啊","我也是啊","哈哈哈哈"]
                         }); 


    *****指定模板位置 ,默认模板位置在 views;*****
    app.set('views', __dirname + '/views');

    ******Ejs 引入模板 ****
      <%- include header.ejs %>
      ******Ejs 绑定数据 ****
     
    <%=h%>
    ****Ejs 绑定 html 数据****
    <%-h%>
    ******Ejs 模板判断语句***
    <% if(true){ %>
       <div>true</div>
    <%} else{ %>
       <div>false< /di v>
    <%} %>


    *****Ejs 模板中循环数据*****
    <%for(var i=0;i<list.length;i++) { %>
    <li><%=list[i] %></li> 
    <%}%>
    *****Ejs 后缀修改为 Html*****
    这是一个小技巧,看着.ejs 的后缀总觉得不爽,使用如下方法,可以将模板文件的后缀换成我们习惯的.html。 
    1.在 app.js 的头上定义 ejs:,代码如下:
    varejs = require('ejs');
    2.注册 html 模板引擎代码如下: app.engine('html',ejs.__express);
    3.将模板引擎换成 html代码如下:
    app.set('view engine', 'html');
    4.修改模 板文件的后缀为 .html。




    *********Express.static静态文件托管


    1、如果你的静态资源存放在多个目录下面,你可以多次调用 express.static 中间件:
    app.use(express.static('public'));
    现在,public 目录下面的文件就可以访问了。
    http://localhost:3000/images/kitten.jpg
    http://localhost:3000/css/style.css 
    http://localhost:3000/js/app.js
    http://localhost:3000/images/bg.png 
    http://localhost:3000/hello.html


    2、如果你希望所有通过 express.static 访问的文件都存放在一个“虚拟(virtual)”目 录(即目录根本不存在)下面,可以通过为静态资源目录指定一个挂载路径的方式来实现,
    如下所示:
    app.use('/static', express.static('public'));
    现在,就可以通过带有 “/static” 前缀的地址来访问 public 目录下 面的文件了。
    http://localhost:3000/static/images/kitten.jpg
    http://localhost:3000/static/css/style.css 
    http://localhost:3000/static/js/app.js 
    http://localhost:3000/static/images/bg.png
    http://localhost:3000/static/hello.html

    -------------------Express 中间件---------------------------------------------------------------------------

    Express 是一个自身功能极简,完全是由路由和中间件构成一个的 web 开发框架:从
    本质上来说,一个 Express 应用就是在调用各种中间件。
    中间件(Middleware) 是一个函数,它可以访问请求对象(request object (req)), 响 应对象(response object (res)), 和 web 应用中处理请求-响应循环流程中的中间件,一般 被命名为 next 的变量。
    中间件的功能包括 :
    执行任何代码。 修改请求和响应对象。 终结请求-响应循环。 调用堆栈中的下一个中间件。
    如果我的 get、post 回调函数中,没有 next 参数,那么就匹配上第一个路由,就不会往下匹 配了。如果想往下匹配的话,那么需要写 next()


    Express 应用可使用如下几种中间件: 

    官网:http://www.expressjs.com.cn/guide/using-middleware.html

    参考:https://blog.csdn.net/tian361zyc/article/details/72818363

    https://blog.csdn.net/wthfeng/article/details/53366169

    Express 是一个自身功能极简,完全是由路由和中间件构成一个的 web 开发框架:从本质上来说,一个 Express 应用就是在调用各种中间件。

    中间件(Middleware) 是一个函数,它可以访问请求对象(request object (req)), 响应对象(response object (res)), 和 web 应用中处于请求-响应循环流程中的中间件,一般被命名为 next 的变量。

    中间件的功能包括:

    • 执行任何代码。
    • 修改请求和响应对象。
    • 终结请求-响应循环。
    • 调用堆栈中的下一个中间件。

    如果当前中间件没有终结请求-响应循环,则必须调用 next() 方法将控制权交给下一个中间件,否则请求就会挂起。


    ***应用级中间件app.use        app.get      app.post

    应用级中间件绑定到 app 对象 使用 app.use() 和 app.METHOD(), 其中, METHOD 是需要处理的 HTTP 请求的方法,例如 GET, PUT, POST 等等,全部小写。

    // 没有挂载路径的中间件,应用的每个请求都会执行该中间件,如下:

    使用可选则挂载路径,可在应用级别或路由级别装载中间件。另外,你还可以同时装在一系列中间件函数,从而在一个挂载点上创建一个子中间件栈。

    // 一个中间件栈,对任何指向 /user/:id 的 HTTP 请求打印出相关信息
    app.use('/user/:id',
    function(req, res, next) {
      console.log('Request URL:', req.originalUrl);
      next();
    },
    function (req, res, next) {
      console.log('Request Type:', req.method);
      next();

    });

    如果需要在中间件栈中跳过剩余中间件,调用 next('route') 方法将控制权交给下一个路由。 注意: next('route') 只对使用 app.VERB() 或 router.VERB() 加载的中间件有效。
    
    //第一个路由, 一个中间件栈,处理指向 /user/:id 的 GET 请求
    app.get('/user/:id', function (req, res, next) {
      // 如果 user id 为 0, 跳到下一个路由
      if (req.params.id == 0) next('route');
      // 否则将控制权交给栈中下一个中间件
      else next(); //
    }, function (req, res, next) {
      // 渲染常规页面
      res.render('regular');
    });
    
    // 第二个路由,处理 /user/:id, 渲染一个特殊页面
    app.get('/user/:id', function (req, res, next) {
      res.render('special');
    });


    ***路由级中间件
      路由级中间件和应用级中间件一样,只是它绑定的对象为 express.Router()。
    var router = express.Router();

    路由级使用 router.use() 或 router.VERB() 加载。

    var app = express();
    var router = express.Router();
    
    // 没有挂载路径的中间件,通过该路由的每个请求都会执行该中间件
    router.use(function (req, res, next) {
      console.log('Time:', Date.now());
      next();
    });
    
    // 一个中间件栈,显示任何指向 /user/:id 的 HTTP 请求的信息
    router.use('/user/:id', function(req, res, next) {
      console.log('Request URL:', req.originalUrl);
      next();//将控制权交给下一个中间件
    }, function (req, res, next) {
      console.log('Request Type:', req.method);
      next();//将控制权交给下一个中间件
    });
    
    // 一个中间件栈,处理指向 /user/:id 的 GET 请求
    router.get('/user/:id', function (req, res, next) {
      // 如果 user id 为 0, 跳到下一个路由
      if (req.params.id == 0) next('route');//将控制权交给下一个路由的中间件
      // 负责将控制权交给栈中下一个中间件
      else next(); //将控制权交给当前路由的中间件,如果当前路由结束,则交给下一个路由的中间件
    }, function (req, res, next) {
      // 渲染常规页面
      res.render('regular');
    });
    
    // 处理 /user/:id, 渲染一个特殊页面
    router.get('/user/:id', function (req, res, next) {
      console.log(req.params.id);
      res.render('special');
    });
    
    // 将路由挂载至应用
    app.use('/', router);

    总结:

    app.use(path,callback)中的callback既可以是router对象又可以是函数;

    app.get(path,callback)中的callback只能是函数;

    路由规则是app.use(path,router)定义的,router代表一个由express.Router()创建的对象,在路由对象中可定义多个路由规则;当一个路径有多个匹配规则时,使用app.use,否则使用相应的app.method(get、post);


    ***错误处理中间件
      

    ***内置中间件app.use(express.static('public'));
      

    ***第三方中间件:body-parser

    引入模块:npm install body-parser
    var bodyParser = require('body-parser')

    GET 请求的参数在 URL 中,在原生 Node 中,需要使用 url 模块来识别参数字符串。在

    Express 中,不需要使用 url 模块了。可以直接使用 req.query 对象。
    ● POST 请求在 express 中不能直接获得,可以使用 body-parser 模块。使用后,将可以用

    req.body 得到参数。但是如果表单中含有文件上传,那么还是需要使用 formidable 模块。



    4.req.body获取POST的参数;

    app.post("/one",function(req,res){})

    ***中间件cookie


    cookie保存在本地浏览器,如果不设置过期时间,关闭浏览器再打开,cookie还是存在的;



    cookie实现浏览过的历史记录:写入数据要做重复判断;下面的没有做



    ***设置cookie:
      res.cookie('rememberme', '1', { maxAge: 900000, httpOnly: true }) 
      res.cookie('name', 'tobi', { domain: '.example.com', path: '/admin', secure: true });
    res.cookie('rememberme', '1', { expires: new Date(Date.now() + 900000), httpOnly: true });

    ***获取cookie

    req.cookies.name


    **删除cookie

    res.cookie('rememberme', '', { expires: new Date(0)}); 
    res.cookie('username','zhangsan',{domain:'.ccc.com',maxAge:0,httpOnly:true});



    ***中间件session

    一、Session 简单介绍
    session 是另一种记录客户状态的机制,不同的是 Cookie 保存在客户端浏览器中,而 session 保存在服
    务器上。
    Session 的用途:
    session 运行在服务器端,当客户端第一次访问服务器时,可以将客户的登录信息保存。 当客户访问其他页面时,可以判断客户的登录状态,做出提示,相当于登录拦截。
    session 可以和 Redis 或者数据库等结合做持久化操作,当服务器挂掉时也不会导致某些客户信息(购物车)
    丢失。

    二、Session 的工作流程
    当浏览器访问服务器并发送第一次请求时,服务器端会创建一个 session 对象,生成一个类似于 key,value 的键值对,然后将 key(cookie)返回到浏览器(客户)端,浏览器下次再访问时,携带 key(cookie), 找到对应的 session(value)。 客户的信息都保存在 session 中

    三、express-session 的使用:

    1.安装 express-session
    cnpm install express-session --save
    2.引入 express-session
    var session = require("express-session");
    3.设置官方文档提供的中间件
    app.use(session({
    secret: 'keyboard cat',
    resave: true, saveUninitialized: true}))


    使用:
    设置值 req.session.username = "张三";
     获取值 req.session.username


     四、express-session 的常用参数:

    配置中间件

    app.use(session({
    secret: '12345',
    name: 'name',
    cookie: {maxAge: 60000}, resave: false, saveUninitialized: true
    }));




    五、express-session 的常用方法:
    req.session.destroy(function(err) { /*销毁 session*/ })

    req.session.username='张三'; //设置 

    session req.session.username //获取 

    session req.session.cookie.maxAge=0; //重新设置 cookie 的过期时间


    六、负载均衡配置 Session,把 Session 保存到数据库 里面
    1.需要安装express-session 和 connect-mongo模块 2.引入模块
    var session = require("express-session");
    const MongoStore = require('connect-mongo')(session); 3.配置中间件
    app.use(session({secret: 'keyboard cat',
    resave: false,
    saveUninitialized: true,
    rolling:true,
    cookie:{
            maxAge:100000
    },
    store: new MongoStore({url: 'mongodb://127.0.0.1:27017/student',
    touchAfter: 24 * 3600 // time period in seconds})

    }))


    七、Cookie 和 Session 区别 1、cookie 数据存放在客户的浏览器上,session 数据放在服务器上。
    2、cookie 不是很安全,别人可以分析存放在本地的 COOKIE 并进行 COOKIE 欺骗 考虑到安全应当使用 session。
    3、session 会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能 考虑到减轻服务器性能方面,应当使用 COOKIE。

    4、单个 cookie 保存的数据不能超过 4K,很多浏览器都限制一个站点最多保存 20 个 cookie。



    展开全文
  • 万人学习 1970-01-01 08:00:00
  • 在Node.js中实现Express(1)

    千次阅读 2018-05-30 18:46:51
    Express提供了一个轻量级模块,把Node.js的http模块功能...本篇文章章介绍如何在Node.js应用程序中实现Express充当Web服务器。你将学习如何配置Express服务器,设计路由,并利用Request和Response对象发送和接收HTT...
  • express

    2020-10-13 14:32:33
    安装express cnpm i express 创建Web服务 var express = require('express') var app = express() // 浏览器收到HTML响应内容之后要开始从上到下依次解析 // 当在解析的过程中 如果发现 link script img iframe ...
  • express 是什么

    2020-10-16 21:32:55
    express 是什么 express 简介 什么是 express 官方给出的概念:Express 是基于 Node.js 平台,快速、开放、极简的 Web 开发框架,官方 通俗的理解:Express 的作用和 Node.js 内置的 http 模块类似,是专门用来创建...
  • express download

    2020-07-30 23:33:20
    NULL 博文链接:https://xuhuandh.iteye.com/blog/510674
  • express的作用

    千次阅读 2019-06-14 17:06:21
    express 1. 为什么要学习express? * express是Node.js的核心框架 * express可以帮助我们快速构建web服务器 / api服务器 * express提供了一个快速生成工具 express-generator * 快速生成工具: 帮助我们快速...
  • express目录结构

    千次阅读 2017-09-05 23:47:06
    当使用express创建大型项目时,会生成一个模板
  • express session的填坑

    千次阅读 2019-02-02 18:59:35
    Express web开发框架开发网站时,关于session的设置大致可以分为两种情况,一种是只要用户通过浏览器访问网站就会生成session,第二种是只有用户登录的情况下才能生成session。 第一种的案例网站比较多,比方百度...
  • 很多时候写express项目大都是用生成器自动生成的项目结构,基本用法就是在router文件夹中写接口,在app.js中进行使用。router文件中的一个js文件既要进行数据库操作,又要写业务逻辑,这样的写法容易导致后期代码都...
  • 英语中并列句的四种类型

    千次阅读 2018-01-12 20:12:47
    一、联合关系 常用的连词有 and( 同,和 ), when(=and just at this time 就在这时,然后 ), not only…but (also)…( 不仅……而且…… ), neither…nor… (既不……也不……)等。如: He helps me and I
  • QLExpress 应用场景 编写此系列博客的目的 QLExpress QLExpress is a powerful, lightweight, dynamic language for the Java platform aimed at improving developers’ productivity in differen...
  • Node.js Error: Cannot find module express的解决办法

    万次阅读 多人点赞 2018-05-07 09:26:18
    1.全局安装express框架,cmd打开命令行,输入如下命令: npm install -g express express 4.x版本中将命令工具分出来,安装一个命令工具,执行命令: npm install -g express-generator 输入express --version验证2....
  • Nodejs的Express完成安装指导

    万次阅读 多人点赞 2014-06-24 16:10:18
    express4.X的有一些变化 #
  • Visual c++ 2010 express 中文版

    万次阅读 2018-06-18 20:04:22
    2018年9月c,c++语言考试用
  • visual studio 2010 express 全序列号

    万次阅读 多人点赞 2012-09-25 13:18:01
    phone开发工具 YDK44-2WW9W-QV7PM-8P8G8-FTYDF...VC# 2010 Express: PQT8W-68YB2-MPY6C-9JV9X-42WJV VC++ 2010 Express: 6VPJ7-H3CXH-HBTPT-X4T74-3YVY7 VWD 2010 Express: CY8XP-83P66-WCF9D-G3P42-K2VG3 VB.NET 2
  • 远程访问 Sql Server Express 的方法

    万次阅读 2015-01-27 13:12:00
    Sql Server Express 默认不支持远程访问,仅可本机访问。若想要远程访问,需要修改默认配置,以Sql server Express 2014 为例,步骤如下: 1、启用TCP/IP 和 Named Pipes。 在开始菜单中选择“SQL Server 2014配置...
1 2 3 4 5 ... 20
收藏数 213,816
精华内容 85,526
关键字:

express