精华内容
下载资源
问答
  • express中的app.use的用法 在Express框架中,有一 加载第方模块插件 加载路由 1. 加载静态区域 1. 使用拦截器

    express中的app.use的用法

    在Express框架中,有一个app.use() 这个方法在经常使用,好么,它到底有什么作用呢

    加载第三方模块插件

    //配post请求
    const bodyParser = require(“body-parser”); //导入了第三方插件
    //加载了第三方插件模块
    app.use(bodyParser.urlencoded({ extended: false, limit: “30mb” }));
    app.use(bodyParser.json({ limit: “30mb” }))

    加载路由

    1.app.use("/stuInfo",require("./routes/StuInfoRouter.js"));

    加载静态区域

    1.app.use("/public", express.static(path.join(__dirname, “./public”)));

    使用拦截器

    在所有请求之前(也就是所有路由之前去拦截)

    app.use((req,resp,next)=>{
    //所有经过路由的请求就会先到达这里被拦下来,如果想放行,直接调用next()
    });

    配合 express-async-errors处理全局异常

    const express  = require("express");
    require("express-async-errors");
    

    //后面这段代码一定要写在路由后面
    //服务器报错以后500

    app.use((error, req, resp, next) => {
        if (req.xhr) {
            resp.json({ status: "fail", msg: "服务器错误" });
        }
        else {
            console.log(error);
            //只有报错才会进这里
            resp.render("status/500");
        }
    });
    

    关于Ajax的一些补充

    get请求

    get请求的页面代码

    function getData() {
        // new ActiveXObject("Micorsoft.XMLHTTP");
        var xhr = new XMLHttpRequest();
        xhr.open("get", "/getAjax1?userName=biaogege", true);
        xhr.onreadystatechange = function () {
            if (xhr.readyState == 4) {
                if (xhr.status == 200 || xhr.status == 304) {
                    console.log(xhr.responseText);
                }
            }
        }
        xhr.send();
    }
    

    get请求的后台代码

    app.get("/getAjax1", (req, resp) => {
        console.log(req.query);
        resp.json({ status: "success", msg: "请求成功" });
    });
    

    post请求

    post请求的页面代码

    function getData() {
        var userName = "biaogege";
        var xhr = new XMLHttpRequest();
        xhr.open("post", "/postAjax2", true);
        xhr.onreadystatechange = function () {
            if (xhr.readyState == 4) {
                if (xhr.status == 200 || xhr.status == 304) {
                    console.log(xhr.responseText);
                }
            }
        }
        // 如果post要发送值,一定要在send里面
        xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
        xhr.send("userName=biaogege");
    }
    

    后台代码

    //配post请求  后台请求一定要配置
    const bodyParser = require("body-parser");
    app.use(bodyParser.urlencoded({ extended: false, limit: "30mb" }));
    app.use(bodyParser.json({ limit: "30mb" }));
    
    
    app.post("/postAjax2", (req, resp) => {
        console.log(req.body);
        resp.json({ status: "success", msg: "请求成功" });
    });
    

    这个时候我们可以明显的发现,post表求有Ajax代码有很多不一样

    1. 它在请求之前一定要设置一个请求头xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
    2.它的数据是通过 xhr.send("userName=biaogege");,不像get那样,直接拼在了url地址的后面

    重要:

    关于post请求,因为是可以设置RequestHeader 这个东西的,所以在传递数据的时候,我们可以不使用拼接的方式,直接传递一个JSON字符串过去,只要后台做了解析的就可以了

    后台的配置

    //配post请求  后台请求一定要配置
    const bodyParser = require("body-parser");
    
    //这一行代码是解析application/x-www-form-urlencoded
    app.use(bodyParser.urlencoded({ extended: false, limit: "30mb" }));
    
    //这一行代码就是解析application/json
    app.use(bodyParser.json({ limit: "30mb" }));
    

    页面上面的请求方式

    function getData() {
        var obj = {
            userName: "张三",
            age: 17,
            sex: "男"
        }
        var xhr = new XMLHttpRequest();
        xhr.open("post", "/postAjax3", true);
        xhr.onreadystatechange = function () {
            if (xhr.readyState == 4) {
                if (xhr.status == 200 || xhr.status == 304) {
                    console.log(xhr.responseText);
                }
            }
        }
        // 如果post要发送值,一定要在send里面
        // xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
        xhr.setRequestHeader("Content-Type", "application/json");
        xhr.send(JSON.stringify(obj));
    }
    

    在上面的代码过程当中, 我们在向后台直接 xhr.send(JSON.stringify(obj)); 发送了一个JSON字符串,并且我们把请求头设置为了xhr.setRequestHeader(“Content-Type”, “application/json”); 后台服务器只要是做了相关的配置,就可以直接把这个POST过去的JSON字符串转换成一个对象

    Ajax的跨域

    Ajax的请求默认情况下是不可以跨域的
    什么是域?什么是跨域?

    域指的是origin,跨域指的源地址的域与请求目标地址域不相同,这样就叫域

    如下所示

    源地址:http://127.0.0.1:5500/ajax1.html
    目标地址:http://192.168.9.254:81/getAjax1?userName=biaogege

    这样源地址的域是http://127.0.0.1:5500,而目标地址的域是http://192.168.9.254:81。两个地址的域不相同,这样就叫跨域

    而Ajax默认是不允许跨域的(受同源策略的影响,这是浏览器的限制,浏览器不允许不同的域之间交互数据),如果发生跨域请求,则会报错误

    Aajx如果想实列跨域获取数据,则一定要后台开始`CORS

    跨域资源共享CORS

    CORS:corss origin resource share,它是在服务端设置的

    resp.setHeader(“Access-Control-Allow-Origin”,"*");
    resp.setHeader(“Access-Control-Allow-Methods”,“GET,POST,PUT,DELETE,OPTIONS”);
    resp.setHeader(“Access-Control-Allow-Headers”,“Content-Type”);

    解决跨域除了上面的方式以外,还有另外的几种方式列举一下

    1. CORS跨域资源共享
    2. jsonp
    3. nginx反向代理
    展开全文
  • use关键字在PHP中的几种用法在学习了和使用了这么多年的PHP之后,您知道use关键字在PHP中都有哪些用法吗?今天我们就来看一下它的三种常见用法。1. 用于命名空间的别名引用//...

    use关键字在PHP中的几种用法

    在学习了和使用了这么多年的PHP之后,您知道use这个关键字在PHP中都有哪些用法吗?今天我们就来看一下它的三种常见用法。

    1. 用于命名空间的别名引用

    // 命名空间
    include 'namespace/file1.php';
    
    use FILE1\objectA;
    use FILE1\objectA as objectB;
    
    echo FILE1\CONST_A, PHP_EOL; // 2
    
    $oA = new objectA();
    $oA->test(); // FILE1\ObjectA
    
    $oB = new objectB();
    $oB->test(); // FILE1\ObjectA
    

    这个想必在日常的工程化开发中会非常常见。毕竟现在的框架都是使用了命名空间的,不管做什么都离不开各种类依赖的调用,在各种控制器文件的上方都会有大量的use xxx\xxx\xxx;语句。

    2. 用于trait特性能力的引入

    // trait
    trait A{
        function testTrait(){
            echo 'This is Trait A!', PHP_EOL;
        }
    }
    
    class B {
        use A;
    }
    
    $b = new B();
    $b->testTrait();
    

    即使在最近这两年,依然还是见过完全没有用过trait的PHP程序员,不要惊讶,这是真实存在的。想想还有那么多项目都还在用TP3也就不奇怪了。trait特性还是非常方便的一种类功能扩展模式,其实我们可以看作是将这个use放在了类中就成为了trait的引用定义了。

    3. 匿名函数传参

    // 匿名函数传参
    
    $a = 1;
    $b = 2;
    // function test($fn) use ($a) // arse error: syntax error, unexpected 'use' (T_USE), expecting '{' 
    function test($fn)
    {
        global $b;
        echo 'test:', $a, '---', $b, PHP_EOL; // test:---2
        $fn(3);
    }
    
    test(function ($c) use ($a) {
        echo $a, '---', $b, '---', $c, PHP_EOL;
    });
    // 1------3
    

    这个就有点意思了吧,方法中要调用外部的变量是需要global的,在这里我们直接通过use()也是可以将变量传递过去的。而且这个仅限于在匿名函数中使用。

    测试代码:https://github.com/zhangyue0503/dev-blog/blob/master/php/202001/source/use%E5%85%B3%E9%94%AE%E5%AD%97%E5%9C%A8PHP%E4%B8%AD%E7%9A%84%E5%87%A0%E7%A7%8D%E7%94%A8%E6%B3%95.php

    展开全文
  • Rust 1.7.0 中宏使用范围包括种情况:第一种情况是宏定义在当前文件中,这文件可能是 crate 默认 module,也可能是任意 module 模块。第二种情况是宏定义在当前 crate ,但是不是在当前文件中,而是其他 ...

    Rust 1.7.0 中的宏使用范围包括三种情况:

    第一种情况是宏定义在当前文件中,这个文件可能是 crate 默认的 module,也可能是任意的 module 模块。

    第二种情况是宏定义在当前 crate ,但是不是在当前文件中,而是其他 module 模块中。

    第三种情况是宏定义在其他的 crate 中,或者其他的 crate 子模块中。

    使用#[macro_use] 可以使被注解的module模块中的宏应用到当前作用域中;或者注释crate中的宏应用到当前crate作用域中。

    第一种情况的例子:

    macro_rules! say_hello{

    ()=>(

    println!("Hello");

    )

    }

    fn main(){

    say_hello!();

    }

    第二种情况:

    先创建一个新文件 macros.rs ,定义一个宏 say_bonjour

    macro_rules! say_bonjour{

    ()=>(

    println!("Bonjour");

    )

    }

    使用

    #[macro_use]

    pub mod macros;

    macro_rules! say_hello{

    ()=>(

    println!("Hello");

    )

    }

    fn main(){

    say_hello!();

    say_bonjour!();

    }

    如果没有 #[macro_use] 编译会出现

    error: macro undefined: ‘say_bonjour!’

    第三种情况:注释在外部 crate 的语句

    创建 log 项目 cargo new log

    在 log 项目中,lib.rs 是入口,在lib.rs中定义 macors 模块。

    ...#[macro_use] mod macros; . . .

    然后,创建对应mod macros 的 macros.rs 文件 vi src/macros.rs

    声明宏 log、error、warn、info,在每个宏定义前面添加 #[macro_export]注释,表示这些宏可以被外部的 crate 使用。

    .

    .

    .

    #[macro_export]

    macro_rules! log {

    ...

    }

    #[macro_export]

    macro_rules! error {

    (target: $target:expr, $($arg:tt)*) => (

    log!(target: $target, $crate::LogLevel::Error, $($arg)*);

    );

    ($($arg:tt)*) => (

    log!($crate::LogLevel::Error, $($arg)*);

    )

    }

    #[macro_export]

    macro_rules! warn {

    (target: $target:expr, $($arg:tt)*) => (

    log!(target: $target, $crate::LogLevel::Warn, $($arg)*);

    );

    ($($arg:tt)*) => (

    log!($crate::LogLevel::Warn, $($arg)*);

    )

    }

    #[macro_export]

    macro_rules! info {

    (target: $target:expr, $($arg:tt)*) => (

    log!(target: $target, $crate::LogLevel::Info, $($arg)*);

    );

    ($($arg:tt)*) => (

    log!($crate::LogLevel::Info, $($arg)*);

    )

    }

    .

    .

    .

    使用:引入 log crate的时候,注明#[macro_use]

    #[macro_use]

    extern crate log;

    .

    .

    .

    if !shutdown.load(Ordering::SeqCst) {

    info!("ConnectionHandler: read timed out ({:?}). Server not shutdown, so \ retrying read.",

    err);

    continue;

    } else {

    info!("ConnectionHandler: read timed out ({:?}). Server shutdown, so \ closing connection.",

    err);

    break;

    }

    .

    .

    .

    展开全文
  • 第一种情况是宏定义在当前文件中,这文件可能是 crate 默认 module,也可能是任意 module 模块。 第二种情况是宏定义在当前 crate ,但是不是在当前文件中,而是其他 module 模块中。 第种情况是宏定义在...

    Rust 1.7.0 中的宏使用范围包括三种情况:
    第一种情况是宏定义在当前文件中,这个文件可能是 crate 默认的 module,也可能是任意的 module 模块。
    第二种情况是宏定义在当前 crate ,但是不是在当前文件中,而是其他 module 模块中。
    第三种情况是宏定义在其他的 crate 中,或者其他的 crate 子模块中。

    使用#[macro_use] 可以使被注解的module模块中的宏应用到当前作用域中;或者注释crate中的宏应用到当前crate作用域中。

    第一种情况的例子:

    macro_rules! say_hello{
       ()=>(
           println!("Hello");
       )
    }
    
    fn main(){
        say_hello!();
    }

    第二种情况:

    • 先创建一个新文件 macros.rs ,定义一个宏 say_bonjour
    macro_rules! say_bonjour{
       ()=>(
           println!("Bonjour");
       )
    }
    • 使用
    #[macro_use]
    pub mod macros;
    
    macro_rules! say_hello{
       ()=>(
           println!("Hello");
       )
    }
    
    fn main(){
        say_hello!();
        say_bonjour!();
    }
    • 如果没有 #[macro_use] 编译会出现

      error: macro undefined: ‘say_bonjour!’

    第三种情况:注释在外部 crate 的语句

    1. 创建 log 项目

      cargo new log
      
    2. 在 log 项目中,lib.rs 是入口,在lib.rs中定义 macors 模块。

    .
    .
    .
    #[macro_use]
    mod macros;
    .
    .
    .

    然后,创建对应mod macros 的 macros.rs 文件 vi src/macros.rs
    声明宏 log、error、warn、info,在每个宏定义前面添加 #[macro_export]注释,表示这些宏可以被外部的 crate 使用。

    .
    .
    .
    #[macro_export]
    macro_rules! log {
        ...
    }
    
    #[macro_export]
    macro_rules! error {
        (target: $target:expr, $($arg:tt)*) => (
            log!(target: $target, $crate::LogLevel::Error, $($arg)*);
        );
        ($($arg:tt)*) => (
            log!($crate::LogLevel::Error, $($arg)*);
        )
    }
    
    #[macro_export]
    macro_rules! warn {
        (target: $target:expr, $($arg:tt)*) => (
            log!(target: $target, $crate::LogLevel::Warn, $($arg)*);
        );
        ($($arg:tt)*) => (
            log!($crate::LogLevel::Warn, $($arg)*);
        )
    }
    
    
    #[macro_export]
    macro_rules! info {
        (target: $target:expr, $($arg:tt)*) => (
            log!(target: $target, $crate::LogLevel::Info, $($arg)*);
        );
        ($($arg:tt)*) => (
            log!($crate::LogLevel::Info, $($arg)*);
        )
    }
    
    
    .
    .
    .

    使用:引入 log crate的时候,注明#[macro_use]

    #[macro_use]
    extern crate log;
    
    .
    .
    .
    
    if !shutdown.load(Ordering::SeqCst) {
                            info!("ConnectionHandler: read timed out ({:?}). Server not shutdown, so \
                                   retrying read.",
                                  err);
                            continue;
                        } else {
                            info!("ConnectionHandler: read timed out ({:?}). Server shutdown, so \
                                   closing connection.",
                                  err);
                            break;
                        }
       .
       .
       .
    展开全文
  • 1.命名空间 2.匿名函数 3.多继承 4.暂时想到这三个,如果有请补充在评论区 转载于:https://www.cnblogs.com/datang6777/p/7111683.html
  • TP5 namespace 和 use 的用法

    千次阅读 2017-04-14 17:11:35
    PHP 命名空间(namespace)是在PHP 5.3中加入,如果你学过C#和Java,那命名空间就不算...为很长标识符名称(通常是为了缓解第一类问题而定义)创建一别名(或简短)名称,提高源代码可读性。 参考来源:...
  • php中namespace和use的用法

    千次阅读 2016-06-28 10:55:15
    PHP主要优势有: ...命名空间不能嵌套或在同一代码处声明多次(只有最后一次会被识别),但是,你能在同一文件中定义多命名空间代码,比较合适做法是每一文件定义一命名空间(可以是相同命名空间)。
  • 在robot framework中 和屏幕截图有关共有三个关键字,分别是: 1)Name:Set Screenshot Directory Source:Screenshot Arguments:[ path ] Sets the directory where screenshots are saved.  It is possible to ...
  • 发现把这三个table PO_AGENTS PA, PER_PEOPLE_F PAPF,HR_LOCATIONS_ALL_TL HL 串起来后语句执行像蜗牛一样慢啊,用户每次跑个报表是都会抱怨说在挑选参数时太慢。不得不优化语句啊。后来想用用oralce 优化器...
  • PHP 5.3中namespace其实是不错东西,可以简化编程,下面介绍类在代码中访问namespace中类方法1 引用namespace和类 假设namespace程序为namespaced-class.phpnamespace Christmas\DaysOf;class ...
  • “Python猫” ,一值得加星标的公众号 剧照 | 《犬夜叉》 原标题 |Three Ways to Use the Walrus Operator in Python作 者 |Jonathan Hsu翻 译 |人气呆毛选手来 源|AI 开发者随着Python 3.8发布,赋值表达式...
  • 原标题 |Three Ways to Use the Walrus Operator in Python作 者 |Jonathan Hsu翻 译 |人气呆毛选手审 校 | 鸢尾、唐里注:敬请点击文末【阅读原文】访问文中相关链接,PC查看体验更佳。随着Python 3.8发布,...
  • 绝不要用一关键字命名表或者列.USE关键字,不显示任何结果,依赖于使用客户机显示某种形式通知;记住必须使用USE打开数据库,才能读取其中数据。四.show databases 返回可用数据可列表;为了获得...
  • mysql的用法

    2019-07-04 11:04:00
    .USE关键字,不显示任何结果,依赖于使用客户机显示某种形式通知;记住必须使用USE打开数据库,才能读取其中数据。 四.show databases 返回可用数据可列表; 为了获得数据库内列表,使用show ...
  • 1、态门指逻辑门电路输出不仅有高电平、低电平,还有高阻态 它有一使能控制端EN ,一数据输入端DATAIN和一数据输出端DATAOUT 2、单总线缓冲器 它通常由多个三态门组成, 3、双向总线缓冲器 library ...
  • php namespace和use的使用

    2020-11-25 10:38:01
    用过CMS的同学都知道,很多CMS都会采用面向对象编程的思想,会遇到很多namespace和use,今天来简单介绍一下php中命名空间和use的使用 namespace和use ...三个文件都在同一个目录下 # class_test1.php <?ph
  • 要想说一口流利而准确的英语,掌握定冠词 “the” 的使用方法非常重要...下面我们学习一下关于 “the” 的三个实用知识点。 Three facts about 'the' 1 We use“the”when referring to a specific thing and both y...
  • 下面介绍mysql中模糊查询四种用法: 1,%:表示任意0或多字符。可匹配任意类型和长度字符,有些情况下若是中文,请使用两百分号(%%)表示。 比如 SELECT * FROM [user] WHERE u_name LIKE ‘%%’ 将会...
  • UIScrollView 基本用法

    2014-02-14 17:26:00
    iPhone/iPad中UIScrollView还是经常要用到,这里作了一个使用它最简单例子,一个ScrollView中放了三个UIView。这三个 UIView分别设置了不同背景色,它们在 ScrollView中可以一页一页滚动。 这段代码放在 ...
  • shell下seq用法

    2012-07-26 14:14:56
    linux下seq的用法: ...它有三个选项 -f, --format=FORMAT use printf style floating-point FORMAT (default: %g) -s, --separator=STRING use STRING to separate numbers (default: \n) -w, --equal-wi...
  • 重命名表语句有种形式,效果是一样: RENAME TABLE 原名 TO 新名字; ALTER TABLE 原名 RENAME 新名字; ALTER TABLE 原名 RENAME TO 新名字; 进入数据库mysql_shiyan: use mysql_shiyan 使用命令修改...
  • laypage 使用非常简单,指向一用于存放分页容器,通过服务端得到一些初始值,即可完成分页渲染。核心方法:laypage.render(options)来设置基础参数。 一、laypage常用基础参数 layui.use(['laypage'], ...
  • MySQl高级用法实战一、创建一电商数据表1)创建数据库数据表2)插入数据3)练习各类sql 语句4)拆开这张表 创建一电商数据库 一、创建一电商数据表 1)创建数据库数据表 create database shop charset=utf8; ...
  • 三个参数是Spotify方法特有参数列表。 有关每种方法及其参数更多文档,请参见文档或。 const result = useSpotify ( spotifyMethod , options , ... args ) const [ invoke , result ] = useSpotify
  • 传入三个整形参数,求他们和,用第三个参数作为返回 DELIMITER $$ USE `school`$$ !-- 选择表名 DROP PROCEDURE IF EXISTS `proc_2`$$ !-- 设置存储过程名字 CREATE DEFINER=`root`@`localhost` ...
  • 重命名表语句有种形式,效果是一样: RENAME TABLE 原名 TO 新名字; ALTER TABLE 原名 RENAME 新名字; ALTER TABLE 原名 RENAME TO 新名字; 1 2 3 4 5 进入数据库mysql_shiyan: use mysql_shiyan 1 使用命令...
  • 简述 理解值传递与引用传递,可以提高...下文将分成难度递增的三个阶段,来记录值传递、引用传递和const修饰符在函数中的用法。 level 1–值传递与引用传递 1、值传递 主调函数向调用函数传递参数实际上只是将实参...
  • 为了回答这个问题,将这个三个关键字的用法整理一下。 where:数据库中常用是where关键字,用于在初始表中筛选查询。它是一个约束声明,用于约束数据,在返回结果集之前起作用。如下面这个例子,从user表中查询出...

空空如也

空空如也

1 2 3 4 5 ... 10
收藏数 184
精华内容 73
关键字:

use的三个用法