借助拦截机制,你可以声明一些拦截器,它们可以检查并转换从应用中发给服务器的 HTTP 请求。这些拦截器还可以在返回应用的途中检查和转换来自服务器的响应。多个拦截器构成了请求/响应处理器的双向链表。

拦截器可以用一种常规的、标准的方式对每一次 HTTP 的请求/响应任务执行从认证到记日志等很多种隐式任务。

如果没有拦截机制,那么开发人员将不得不对每次 HttpClient 调用显式实现这些任务。

编写拦截器

要实现拦截器,就要实现一个实现了 HttpInterceptor 接口中的 intercept() 方法的类。

这里是一个什么也不做的空白拦截器,它只会不做任何修改的传递这个请求。

Path:"app/http-interceptors/noop-interceptor.ts" 。

import { Injectable } from '@angular/core';

import {

HttpEvent, HttpInterceptor, HttpHandler, HttpRequest

} from '@angular/common/http';

import { Observable } from 'rxjs';

/** Pass untouched request through to the next request handler. */

@Injectable()

export class NoopInterceptor implements HttpInterceptor {

intercept(req: HttpRequest, next: HttpHandler):

Observable> {

return next.handle(req);

}

}

intercept 方法会把请求转换成一个最终返回 HTTP 响应体的 Observable。 在这个场景中,每个拦截器都完全能自己处理这个请求。

大多数拦截器拦截都会在传入时检查请求,然后把(可能被修改过的)请求转发给 next 对象的 handle() 方法,而 next 对象实现了 HttpHandler 接口。

export abstract class HttpHandler {

abstract handle(req: HttpRequest): Observable>;

}

像 intercept() 一样,handle() 方法也会把 HTTP 请求转换成 HttpEvents 组成的 Observable,它最终包含的是来自服务器的响应。 intercept() 函数可以检查这个可观察对象,并在把它返回给调用者之前修改它。

这个无操作的拦截器,会直接使用原始的请求调用 next.handle(),并返回它返回的可观察对象,而不做任何后续处理。

next 对象

next 对象表示拦截器链表中的下一个拦截器。 这个链表中的最后一个 next 对象就是 HttpClient 的后端处理器(backend handler),它会把请求发给服务器,并接收服务器的响应。

大多数的拦截器都会调用 next.handle(),以便这个请求流能走到下一个拦截器,并最终传给后端处理器。 拦截器也可以不调用 next.handle(),使这个链路短路,并返回一个带有人工构造出来的服务器响应的 自己的 Observable。

这是一种常见的中间件模式,在像 "Express.js" 这样的框架中也会找到它。

提供这个拦截器

这个 NoopInterceptor 就是一个由 Angular 依赖注入 (DI)系统管理的服务。 像其它服务一样,你也必须先提供这个拦截器类,应用才能使用它。

由于拦截器是 HttpClient 服务的(可选)依赖,所以你必须在提供 HttpClient 的同一个(或其各级父注入器)注入器中提供这些拦截器。 那些在 DI 创建完 HttpClient 之后再提供的拦截器将会被忽略。

由于在 AppModule 中导入了 HttpClientModule,导致本应用在其根注入器中提供了 HttpClient。所以你也同样要在 AppModule 中提供这些拦截器。

在从 @angular/common/http 中导入了 HTTP_INTERCEPTORS 注入令牌之后,编写如下的 NoopInterceptor 提供者注册语句:

{ provide: HTTP_INTERCEPTORS, useClass: NoopInterceptor, multi: true },

注意 multi: true 选项。 这个必须的选项会告诉 Angular HTTP_INTERCEPTORS 是一个多重提供者的令牌,表示它会注入一个多值的数组,而不是单一的值。

你也可以直接把这个提供者添加到 AppModule 中的提供者数组中,不过那样会非常啰嗦。况且,你将来还会用这种方式创建更多的拦截器并提供它们。 你还要特别注意提供这些拦截器的顺序。

认真考虑创建一个封装桶(barrel)文件,用于把所有拦截器都收集起来,一起提供给 httpInterceptorProviders 数组,可以先从这个 NoopInterceptor 开始。

Path:"app/http-interceptors/index.ts" 。

/* "Barrel" of Http Interceptors */

import { HTTP_INTERCEPTORS } from '@angular/common/http';

import { NoopInterceptor } from './noop-interceptor';

/** Http interceptor providers in outside-in order */

export const httpInterceptorProviders = [

{ provide: HTTP_INTERCEPTORS, useClass: NoopInterceptor, multi: true },

];

然后导入它,并把它加到 AppModule 的 providers 数组中,就像这样:

Path:"app/app.module.ts (interceptor providers)" 。

providers: [

httpInterceptorProviders

],

当你再创建新的拦截器时,就同样把它们添加到 httpInterceptorProviders 数组中,而不用再修改 AppModule。

拦截器的顺序

Angular 会按照你提供它们的顺序应用这些拦截器。 如果你提供拦截器的顺序是先 A,再 B,再 C,那么请求阶段的执行顺序就是 A->B->C,而响应阶段的执行顺序则是 C->B->A。

以后你就再也不能修改这些顺序或移除某些拦截器了。 如果你需要动态启用或禁用某个拦截器,那就要在那个拦截器中自行实现这个功能。

处理拦截器事件

大多数 HttpClient 方法都会返回 HttpResponse 型的可观察对象。HttpResponse 类本身就是一个事件,它的类型是 HttpEventType.Response。但是,单个 HTTP 请求可以生成其它类型的多个事件,包括报告上传和下载进度的事件。HttpInterceptor.intercept() 和 HttpHandler.handle() 会返回 HttpEvent 型的可观察对象。

很多拦截器只关心发出的请求,而对 next.handle() 返回的事件流不会做任何修改。 但是,有些拦截器需要检查并修改 next.handle() 的响应。上述做法就可以在流中看到所有这些事件。

虽然拦截器有能力改变请求和响应,但 HttpRequest 和 HttpResponse 实例的属性却是只读(readonly)的, 因此让它们基本上是不可变的。

有充足的理由把它们做成不可变对象:应用可能会重试发送很多次请求之后才能成功,这就意味着这个拦截器链表可能会多次重复处理同一个请求。 如果拦截器可以修改原始的请求对象,那么重试阶段的操作就会从修改过的请求开始,而不是原始请求。 而这种不可变性,可以确保这些拦截器在每次重试时看到的都是同样的原始请求。

你的拦截器应该在没有任何修改的情况下返回每一个事件,除非它有令人信服的理由去做。

TypeScript 会阻止你设置 HttpRequest 的只读属性。

// Typescript disallows the following assignment because req.url is readonly

req.url = req.url.replace('http://', 'https://');

如果你必须修改一个请求,先把它克隆一份,修改这个克隆体后再把它传给 next.handle()。你可以在一步中克隆并修改此请求,例子如下。

Path:"app/http-interceptors/ensure-https-interceptor.ts (excerpt)" 。

// clone request and replace 'http://' with 'https://' at the same time

const secureReq = req.clone({

url: req.url.replace('http://', 'https://')

});

// send the cloned, "secure" request to the next handler.

return next.handle(secureReq);

这个 clone() 方法的哈希型参数允许你在复制出克隆体的同时改变该请求的某些特定属性。

修改请求体。

readonly 这种赋值保护,无法防范深修改(修改子对象的属性),也不能防范你修改请求体对象中的属性。

req.body.name = req.body.name.trim(); // bad idea!

如果必须修改请求体,请执行以下步骤。

复制请求体并在副本中进行修改。

使用 clone() 方法克隆这个请求对象。

用修改过的副本替换被克隆的请求体。

// copy the body and trim whitespace from the name property

const newBody = { ...body, name: body.name.trim() };

// clone request and set its body

const newReq = req.clone({ body: newBody });

// send the cloned request to the next handler.

return next.handle(newReq);

克隆时清除请求体。

有时,你需要清除请求体而不是替换它。为此,请将克隆后的请求体设置为 null。

注:

如果你把克隆后的请求体设为 undefined,那么 Angular 会认为你想让请求体保持原样。

newReq = req.clone({ ... }); // body not mentioned => preserve original body

newReq = req.clone({ body: undefined }); // preserve original body

newReq = req.clone({ body: null }); // clear the body

设置默认请求头

应用通常会使用拦截器来设置外发请求的默认请求头。

该范例应用具有一个 AuthService,它会生成一个认证令牌。 在这里,AuthInterceptor 会注入该服务以获取令牌,并对每一个外发的请求添加一个带有该令牌的认证头:

Path:"app/http-interceptors/auth-interceptor.ts" 。

import { AuthService } from '../auth.service';

@Injectable()

export class AuthInterceptor implements HttpInterceptor {

constructor(private auth: AuthService) {}

intercept(req: HttpRequest, next: HttpHandler) {

// Get the auth token from the service.

const authToken = this.auth.getAuthorizationToken();

// Clone the request and replace the original headers with

// cloned headers, updated with the authorization.

const authReq = req.clone({

headers: req.headers.set('Authorization', authToken)

});

// send cloned request with header to the next handler.

return next.handle(authReq);

}

}

这种在克隆请求的同时设置新请求头的操作太常见了,因此它还有一个快捷方式 setHeaders:

// Clone the request and set the new header in one step.

const authReq = req.clone({ setHeaders: { Authorization: authToken } });

这种可以修改头的拦截器可以用于很多不同的操作,比如:

认证 / 授权

控制缓存行为。比如 If-Modified-Since

XSRF 防护

用拦截器记日志

因为拦截器可以同时处理请求和响应,所以它们也可以对整个 HTTP 操作执行计时和记录日志等任务。

考虑下面这个 LoggingInterceptor,它捕获请求的发起时间、响应的接收时间,并使用注入的 MessageService 来发送总共花费的时间。

Path:"app/http-interceptors/logging-interceptor.ts)" 。

import { finalize, tap } from 'rxjs/operators';

import { MessageService } from '../message.service';

@Injectable()

export class LoggingInterceptor implements HttpInterceptor {

constructor(private messenger: MessageService) {}

intercept(req: HttpRequest, next: HttpHandler) {

const started = Date.now();

let ok: string;

// extend server response observable with logging

return next.handle(req)

.pipe(

tap(

// Succeeds when there is a response; ignore other events

event => ok = event instanceof HttpResponse ? 'succeeded' : '',

// Operation failed; error is an HttpErrorResponse

error => ok = 'failed'

),

// Log when response observable either completes or errors

finalize(() => {

const elapsed = Date.now() - started;

const msg = `${req.method} "${req.urlWithParams}"

${ok} in ${elapsed} ms.`;

this.messenger.add(msg);

})

);

}

}

RxJS 的 tap 操作符会捕获请求成功了还是失败了。 RxJS 的 finalize 操作符无论在响应成功还是失败时都会调用(这是必须的),然后把结果汇报给 MessageService。

在这个可观察对象的流中,无论是 tap 还是 finalize 接触过的值,都会照常发送给调用者。

用拦截器实现缓存

拦截器还可以自行处理这些请求,而不用转发给 next.handle()。

比如,你可能会想缓存某些请求和响应,以便提升性能。 你可以把这种缓存操作委托给某个拦截器,而不破坏你现有的各个数据服务。

下例中的 CachingInterceptor 演示了这种方法。

Path:"app/http-interceptors/caching-interceptor.ts)" 。

@Injectable()

export class CachingInterceptor implements HttpInterceptor {

constructor(private cache: RequestCache) {}

intercept(req: HttpRequest, next: HttpHandler) {

// continue if not cacheable.

if (!isCacheable(req)) { return next.handle(req); }

const cachedResponse = this.cache.get(req);

return cachedResponse ?

of(cachedResponse) : sendRequest(req, next, this.cache);

}

}

isCacheable() 函数用于决定该请求是否允许缓存。 在这个例子中,只有发到 npm 包搜索 API 的 GET 请求才是可以缓存的。

如果该请求是不可缓存的,该拦截器只会把该请求转发给链表中的下一个处理器。

如果可缓存的请求在缓存中找到了,该拦截器就会通过 of() 函数返回一个已缓存的响应体的可观察对象,然后绕过 next 处理器(以及所有其它下游拦截器)。

如果可缓存的请求不在缓存中,代码会调用 sendRequest()。这个函数会创建一个没有请求头的请求克隆体,这是因为 npm API 禁止它们。然后,该函数把请求的克隆体转发给 next.handle(),它会最终调用服务器并返回来自服务器的响应对象。

/**

* Get server response observable by sending request to `next()`.

* Will add the response to the cache on the way out.

*/

function sendRequest(

req: HttpRequest,

next: HttpHandler,

cache: RequestCache): Observable> {

// No headers allowed in npm search request

const noHeaderReq = req.clone({ headers: new HttpHeaders() });

return next.handle(noHeaderReq).pipe(

tap(event => {

// There may be other events besides the response.

if (event instanceof HttpResponse) {

cache.put(req, event); // Update the cache.

}

})

);

}

注意 sendRequest() 是如何在返回应用程序的过程中拦截响应的。该方法通过 tap() 操作符来管理响应对象,该操作符的回调函数会把该响应对象添加到缓存中。

然后,原始的响应会通过这些拦截器链,原封不动的回到服务器的调用者那里。

数据服务,比如 PackageSearchService,并不知道它们收到的某些 HttpClient 请求实际上是从缓存的请求中返回来的。

用拦截器来请求多个值

HttpClient.get() 方法通常会返回一个可观察对象,它会发出一个值(数据或错误)。拦截器可以把它改成一个可以发出多个值的可观察对象。

修改后的 CachingInterceptor 版本可以返回一个立即发出所缓存响应的可观察对象,然后把请求发送到 NPM 的 Web API,然后把修改过的搜索结果重新发出一次。

// cache-then-refresh

if (req.headers.get('x-refresh')) {

const results$ = sendRequest(req, next, this.cache);

return cachedResponse ?

results$.pipe( startWith(cachedResponse) ) :

results$;

}

// cache-or-fetch

return cachedResponse ?

of(cachedResponse) : sendRequest(req, next, this.cache);

cache-then-refresh 选项是由一个自定义的 x-refresh 请求头触发的。

PackageSearchComponent 中的一个检查框会切换 withRefresh 标识, 它是 PackageSearchService.search() 的参数之一。 search() 方法创建了自定义的 x-refresh 头,并在调用 HttpClient.get() 前把它添加到请求里。

修改后的 CachingInterceptor 会发起一个服务器请求,而不管有没有缓存的值。 就像 前面 的 sendRequest() 方法一样进行订阅。 在订阅 results$ 可观察对象时,就会发起这个请求。

如果没有缓存值,拦截器直接返回 results$。

如果有缓存的值,这些代码就会把缓存的响应加入到 result$ 的管道中,使用重组后的可观察对象进行处理,并发出两次。 先立即发出一次缓存的响应体,然后发出来自服务器的响应。 订阅者将会看到一个包含这两个响应的序列。

查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. angular2 在header中带有继承的cookie

    2019独角兽企业重金招聘Python工程师标准>>> 设置表头 //form形式 private sendHttpRequest(url : string, params : any): Promise<any> {let Interface_Address : string ""; //接口地址let body new URLSearchParams();// let commonUser th…...

    2024/4/27 17:39:55
  2. angular4 httpclient拦截器

    1.创建服务&#xff1a; InterceptorService.ts import { Injectable } from angular/core; import { HttpEvent,HttpInterceptor,HttpHandler,HttpRequest,HttpResponse} from "angular/common/http"; import {Observable} from "rxjs/Observable"; impor…...

    2024/4/27 15:17:33
  3. angular 拦截器_在Angular中绕过Http拦截器的超级简单技巧

    angular 拦截器Recently, I have been working on a task, regarding AWS S3 bucket file uploading using Angular and preSigned URLs. In that project, I have used HTTP interceptor to handle my request to bind all header parameters. My problem arose while I was t…...

    2024/4/27 18:11:52
  4. Angular学习笔记79:Angular 中的拦截器-HttpInterceptor

    在项目中&#xff0c;前端需要在每次发送给后端的请求的header中统一添加 token 信息或者其他统一操作&#xff0c;这个时候就用到了拦截器。 在 Angular 中&#xff0c;创建一个拦截器使用到了 angular/common/http中的HttpInterceptor,实现的具体步骤如下&#xff1a; 创建…...

    2024/4/27 14:51:47
  5. angular8 拦截器

    首先 新建一个文件夹叫 interceptors&#xff0c;在该文件夹下建一个文件叫param.interceptor.ts&#xff0c;输入ng-http-interceptor创建 import { Injectable } from angular/core; import {HttpEvent, HttpInterceptor, HttpHandler, HttpRequest } from angular/common/…...

    2024/4/27 17:22:52
  6. Angular 拦截器(403、401)

    直接上代码&#xff1a; angular.module(webb-ui).factory(authInterceptor, [$q,$rootScope,$location,$injector,$timeout,function ($q,$scope,$location,$injector,$timeout) {function isNotPriv(url){return url.indexOf("/priv/") -1}var authInterceptor {…...

    2024/4/27 13:26:04
  7. angular拦截器 登录信息验证

    angular拦截器 登录信息验证 .factory(MHttpInterceptor, [$q, httpError, $log, function($q, httpError, $log) {// register the interceptor as a service// see: https://code.angularjs.org/1.2.0-rc.3/docs/api/ng.$http// remark: the function($q) should never add …...

    2024/4/27 15:29:22
  8. 同为javascript框架,react和angular各有什么优缺点,各自又适合什么开发场景?

    http://www.zhihu.com/question/23444167...

    2024/4/26 7:06:00
  9. Django解析Angular的POST数据

    在使用Django和Angular的过程中&#xff0c;遇到过一个Angular向Django POST数据的问题。 // Angular $http({url: "myviews",method: "POST",data: {text: hello world, date: 2017-01-04} }) # Django def myviews(request):print request.POSTprint req…...

    2024/4/27 15:02:27
  10. android Application Component研究之BroadcastReceiver

    本文为原创文章,欢迎转载!转载时请注明出处:http://blog.csdn.net/windskier这篇文章开始从framework的角度来研究一下android四大控件最后一个控件BroadcastReceiver 的机制与原理,BroadcastReceiver 字面意思就是广播接收器,它能接收来自于系统的以及其他appliaction的广…...

    2024/4/27 13:29:54
  11. angular post传参 后台接收不到 解决方案

    var postCfg {headers: { Content-Type: application/x-www-form-urlencoded },transformRequest: function (data) {return $.param(data);} }; $http.post("f2fPageInfo.do",{type:-1,pgNo:1,pgSize:5},postCfg).success(function(data){})...

    2024/4/20 20:06:38
  12. angular6 的HttpClient.post方法发送参数失败,总是报500的错误

    angular的ajax请求真的是太坑了&#xff0c;只要涉及到发送参数的就有问题&#xff0c;会报500&#xff0c;即使你传对了参数&#xff0c;后台也接收不到&#xff0c;这个问题其实不是后台的问题&#xff0c; 而是因为angular的请求方法中&#xff0c;涉及到传参的时候&#xf…...

    2024/4/27 18:50:48
  13. 解决Ionic5/Angular8项目中使用Angular的HttpClient发送post请求无效的问题

    解决Ionic5/Angular8项目中使用Angular的HttpClient.post请求无效的问题直接上解决思路1、java服务端接口的写法Description("获取计划执行监控总体数据列表")POSTPath("/getPlanExecMonitorTotalData")Produces(MediaType.APPLICATION_JSON)public String…...

    2024/4/27 14:38:25
  14. angular post 带参数 导出excel

    原文地址&#xff1a;http://www.cnblogs.com/xujanus/p/5985644.html html <button class"btn btn-info" ng-click"getDownloadLink()">导出查询结果</button> js // 导出查询结果 $scope.getDownloadLink function () {var url $rootScope…...

    2024/4/21 3:27:44
  15. angular 请求错误0

    大致场景如下&#xff1a; 正常使用 angular 的 Service 时候怎么 set 都不能正常存储数据字段&#xff0c;经过几经测试后发现是 set 前 URL 获取参数的时候数据字段格式不兼容&#xff0c;fuck &#xff01;&#xff01;&#xff01; 如下是实现的具体 code&#xff1a; im…...

    2024/4/21 3:27:43
  16. Angular源码理解–启动过程

    Angular源码理解–启动过程 文章目录Angular源码理解--启动过程整体框架自执行匿名函数启动过程启动过程中的点滴window.angular.bootstrapbindJQuery()解析publishExternalAPI(angular)extend()setupModuleLoader(window)参考&#xff1a;学习AngularJS v1.4.7的记录。整体框架…...

    2024/4/26 11:32:47
  17. js、Jquery、AngularJs中的extend方法

    1、js中的extend(); http://www.cnblogs.com/5201314/archive/2009/05/22/1487213.html js虽然是脚本语言&#xff1b;但是同样支持与java、C#、C等语言的继承&#xff1b;使用Object.extend()方法实现继承&#xff1b; Object.extend function(destination, source) { for…...

    2024/4/21 3:27:42
  18. 【译】在时间属性上慎用Angular.js1.4的“angular.merge”函数

    在时间属性上慎用Angular.js1.4的“angular.merge”函数 原文&#xff1a;Pay Attention to "angular.merge" in 1.4 on Date Properties 今天我将应用从Angular.js1.3.9升级到1.4的时候&#xff0c;发现了一些Bug。在经过一翻研究后&#xff0c;发现它们与时间属性及…...

    2024/4/20 7:42:10
  19. Angular从0到1:function(上)

    1、前言 Angular作为最流行的前端MV*框架&#xff0c;在WEB开发中占据了重要的地位。接下来&#xff0c;我们就一步一步从官方api结合实践过程&#xff0c;来学习一下这个强大的框架吧。 Note&#xff1a;每个function描述标题之后的★标明了该function的重要程度&#xff08;1…...

    2024/4/21 3:27:39
  20. angular.js学习笔记(三)

    全局API&#xff1a; 当angular.js加载完成之后&#xff0c;一些全局API即可用&#xff0c;主要包括 1.copy(src,[dst]):对象或数组复制 2.element(element):返回被包装为Jquery元素的DOM节点&#xff0c;区分JQuery类库加载顺序成为完整JQ对象或其子集。 3.equals(obj1,obj2):…...

    2024/4/21 3:27:38

最新文章

  1. docker容器技术篇:集群管理实战mesos+zookeeper+marathon(二)

    docker集群管理实战mesoszookeepermarathon&#xff08;二&#xff09; 一 实验环境 操作系统&#xff1a;centos7.9 二 基础环境配置以及安装mesos 安装过程请点击下面的链接查看&#xff1a; 容器集群管理实战mesoszookeepermarathon&#xff08;一&#xff09; 三 安装…...

    2024/4/27 19:47:46
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/3/20 10:50:27
  3. 2024认证杯数学建模B题思路模型代码

    目录 2024认证杯数学建模B题思路模型代码:4.11开赛后第一时间更新&#xff0c;获取见文末名片 第十三届“认证杯”数学中国数学建模比赛赛后体会 2024认证杯数学建模B题思路模型代码:4.11开赛后第一时间更新&#xff0c;获取见文末名片 第十三届“认证杯”数学中国数学建模比…...

    2024/4/27 12:27:45
  4. Topaz Video AI for Mac v5.0.0激活版 视频画质增强软件

    Topaz Video AI for Mac是一款功能强大的视频处理软件&#xff0c;专为Mac用户设计&#xff0c;旨在通过人工智能技术为视频编辑和增强提供卓越的功能。这款软件利用先进的算法和深度学习技术&#xff0c;能够自动识别和分析视频中的各个元素&#xff0c;并进行智能修复和增强&…...

    2024/4/27 12:49:51
  5. 6.9物联网RK3399项目开发实录-驱动开发之PWM的使用(wulianjishu666)

    嵌入式实战开发例程&#xff0c;珍贵资料&#xff0c;开发必备&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1149x7q_Yg6Zb3HN6gBBAVA?pwdhs8b PWM 使用 前言 AIO-3399J 开发板上有 4 路 PWM 输出&#xff0c;分别为 PWM0 ~ PWM3&#xff0c;4 路 PWM 分别使用在…...

    2024/4/26 20:06:06
  6. 【外汇早评】美通胀数据走低,美元调整

    原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...

    2024/4/26 18:09:39
  7. 【原油贵金属周评】原油多头拥挤,价格调整

    原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...

    2024/4/26 20:12:18
  8. 【外汇周评】靓丽非农不及疲软通胀影响

    原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...

    2024/4/26 23:05:52
  9. 【原油贵金属早评】库存继续增加,油价收跌

    原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...

    2024/4/27 4:00:35
  10. 【外汇早评】日本央行会议纪要不改日元强势

    原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...

    2024/4/27 17:58:04
  11. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

    原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...

    2024/4/27 14:22:49
  12. 【外汇早评】美欲与伊朗重谈协议

    原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...

    2024/4/26 21:56:58
  13. 【原油贵金属早评】波动率飙升,市场情绪动荡

    原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...

    2024/4/27 9:01:45
  14. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

    原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...

    2024/4/27 17:59:30
  15. 【原油贵金属早评】市场情绪继续恶化,黄金上破

    原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...

    2024/4/25 18:39:16
  16. 【外汇早评】美伊僵持,风险情绪继续升温

    原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...

    2024/4/25 18:39:16
  17. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

    原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...

    2024/4/26 19:03:37
  18. 氧生福地 玩美北湖(上)——为时光守候两千年

    原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...

    2024/4/26 22:01:59
  19. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

    原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...

    2024/4/25 18:39:14
  20. 氧生福地 玩美北湖(下)——奔跑吧骚年!

    原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...

    2024/4/26 23:04:58
  21. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

    原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...

    2024/4/25 2:10:52
  22. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

    原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...

    2024/4/25 18:39:00
  23. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

    原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...

    2024/4/26 19:46:12
  24. 广州械字号面膜生产厂家OEM/ODM4项须知!

    原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...

    2024/4/27 11:43:08
  25. 械字号医用眼膜缓解用眼过度到底有无作用?

    原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...

    2024/4/27 8:32:30
  26. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  27. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  28. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  29. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  30. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  31. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  32. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  33. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  34. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  35. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  36. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  37. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  38. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  39. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  40. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  41. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  42. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  43. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  44. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  45. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57