文章目录

  • Node 基础
      • 预备知识与后续知识及项目案例
    • 一、简介
      • 1、什么是Node.js?
      • 2、Node.js的特性
      • 3、Node的优点
    • 二、Node基础知识
      • 1、Node安装
        • Node环境安装失败解决办法
          • 1. 错误代号2502、2503
          • 2. 执行命令报错
        • PATH环境变量
        • 多版本安装方式
      • 2、Node.js的组成
        • 基础语法
        • 全局对象global
      • 3、Node.js的模块化开发
        • (1)JavaScript开发弊端
        • (2)软件中的模块化开发
        • (3)Node.js中的模块化开发规范
      • 4、系统模块
        • (1)什么是系统模块
        • (2)系统模板fs文件操作
        • (3)系统模块path 路径操作
      • 5、第三方模块
        • (1)什么是第三方模块
        • (2)获取第三方模块
        • (3)第三方模块 nodemon
        • (4)第三方模块 nrm
        • (5)第三方模块 Gulp
        • (6)Gulp能做什么
        • (7)Gulp使用
        • (8)Gulp中提供的方法
          • 注:gulp.pipe:**
        • (9)Gulp插件
      • 6、package.json
        • (1)node_modules文件夹的问题
        • (2)package.json文件的作用
        • (3)项目依赖
        • (4)开发依赖
        • (5)package-lock.json文件的作用
      • 7、Node.js中模块加载机制
        • (1)模块查找规则-当模块拥有路径但没有后缀时
        • (2)模块查找规则-当模块没有路径且没有后缀时
      • 8、Web服务器端
        • (1)服务器端基础概念
        • (2)创建web服务器
      • 9、HTTP协议
        • (1)HTTP协议的概念
        • (2)报文
        • (3)请求报文
        • (4)响应报文
        • (5)HTTP请求与响应处理
          • 请求参数
          • GET请求参数
          • POST请求参数
          • 路由
          • 静态资源
      • 10、Node.js异步编程
        • (1)同步API,异步API
        • (2)同步API, 异步API的区别( 获取返回值 )
        • (3)回调函数
        • (4)使用回调函数获取异步API执行结果
        • (5)同步API, 异步API的区别(代码执行顺序)
        • (6)代码执行顺序分析
        • (7)Node.js中的异步API
        • (8)Promise
        • (9)异步函数

Node 基础

预备知识与后续知识及项目案例

HTML入门与进阶以及HTML5
CSS
JS-上
JS-下
jQuery
Node.js + Gulp 知识点汇总
MongoDB + Express 入门及案例代码
Vue项目开发-仿蘑菇街电商APP

一、简介

1、什么是Node.js?

Node.js 是一种建立在Google Chrome’s v8 engine上的 non-blocking (非阻塞), event-driven (基于事件的) I/O平台.
Node.js平台使用的开发语言是JavaScript,平台提供了操作系统低层的API,方便做服务器端编程,具体包括文件操作、进程操作、通信操作等系统模块

2、Node.js的特性

  • 基于V8引起渲染JS
    • REPL模式(Read-Evaluate-Print-Loop, 输入-求值-输出-循环)
    • 在命令行中 node xxx.js
    • 在webstorm,Vscode等编译器中执行
  • 单线程、无阻塞IO操作、event-driven时间驱动
    • node是单线程异步,基于事件驱动任务执行的
    • 类似于发布订阅(响应式)
  • window VS global
    • 客户端this执向window
    • 在JS中执行,this执行当前模块,在命令行中执行,this指向global
    • Process.nextTick/setImmediate

3、Node的优点

Node作为一个热门的前端框架,后台语言,有很多吸引人的地方:

RESTful API

单线程

Node可以在不新增额外线程的情况下,依然可以对任务进行并发处理 —— Node.js是单线程的。它通过事件循环(event loop)来实现并发操作,对此,我们应该要充分利用这一点 —— 尽可能的避免阻塞操作,取而代之,多使用非阻塞操作。

非阻塞IO

V8虚拟机

事件驱动

二、Node基础知识

1、Node安装

官网:https://nodejs.org/en/

在这里插入图片描述

  • LTS = Long Term Support 长期支持版 稳定版
  • Current 拥有最新特性 实验版

Node环境安装失败解决办法

1. 错误代号2502、2503

失败原因:系统帐户权限不足。

解决办法:

  1. 以管理员身份运行powershell命令行工具
  2. 输入运行安装包命令 msiexec /package node安装包位置

在这里插入图片描述

2. 执行命令报错

失败原因:Node安装目录写入环境变量失败

解决办法:将Node安装目录添加到环境变量中

在这里插入图片描述

PATH环境变量

存储系统中的目录,在命令行中执行命令的时候系统会自动去这些目录中查找命令的位置。

在这里插入图片描述

多版本安装方式

  • 卸载已有的Node.js
  • 下载nvm
  • 在C盘创建目录dev
  • 在dev目中中创建两个子目录nvm和nodejs
  • 并且把nvm包解压进去nvm目录中
  • 在install.cmd文件上面右键选择【以管理员身份运行】
  • 打开的cmd窗口直接回车会生成一个settings.txt文件,修改文件中配置信息
  • 配置nvm和Node.js环境变量
    • NVM_HOME:C:\dev\nvm
    • NVM_SYMLINK:C:\dev\nodejs
  • 把配置好的两个环境变量加到Path中

2、Node.js的组成

JavaScript 由三部分组成,ECMAScript,DOM,BOM。

Node.js是由ECMAScript及Node 环境提供的一些附加API组成的,包括文件、网络、路径等等一些更加强大的 API。

在这里插入图片描述

JavaScript可以运行在哪里?

在这里插入图片描述

浏览器 内核
IE Trident
FireFox Gecko
Chrome WebKit
Safari WebKit
Opera Presto
Edge Chakra

基础语法

所有ECMAScript语法在Node环境中都可以使用。在Node环境下执行代码,使用Node命令执行后缀为.js的文件即可

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9DKUrY8p-1577712588681)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1577622258996.png)]

全局对象global

在浏览器中全局对象是window,在Node中全局对象是global。

Node中全局对象下有以下方法,可以在任何地方使用,global可以省略。

  • console.log() 在控制台中输出
  • setTimeout() 设置超时定时器
  • clearTimeout() 清除超时时定时器
  • setInterval() 设置间歇定时器
  • clearInterval() 清除间歇定时器

3、Node.js的模块化开发

(1)JavaScript开发弊端

JavaScript在使用时存在两大问题,文件依赖和命名冲突。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fnPnpO9H-1577712588682)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1577622381958.png)]

1、污染全局变量
//a.js 文件:

var test1='aaaaaa';
//b.js 文件
var test1='bbbbbb';<script>console.log('test1='+test1);//bbbbbb;</script>
console test1 输出'bbbbbb';悲剧啊

2、命名冲突

//a.js 文件:
function fun(){console.log('this is b');
}//b.js 文件function fun(){console.log('this is b');
}
//main.js 文件
<script src="a.js"></script>
<script src="b.js"></script>
<script>fun();//this is b;
</script>
小张在a.js定义了fun(),小李在b.js又定义了fun(),a,b被小王引入到main.js,执行fun(),输出this is b; 

3、依赖关系
b.js依赖a.js,标签的书写顺序必须是:

<script type="text/javascript" src="a.js"></script>
<script type="text/javascript" src="b.js"></script>

这样在多人开发的时候很难协调啊,令人头疼的问题。

解决冲突的方法

1、使用java式的命名空间
2、变量前加“_”
3、对象写法

var module1={test1:'aaaaaa',fun:function(){console.log(this.test1);}
}
变量和函数封装在对象里面,使用时,调用对象的属性即可:
module1.fun();//aaaaaa
但是这样的写法会暴露所有模块成员,内部状态可以被外部改写,
module1.test1='cccccc';

4、匿名闭包函数

var  module1=(function(){var test1='aaaaaa';var fun=function(){console.log('this is a');}return{fun:fun}
}());

匿名函数有自己的作用域,这样外部代码无法读取 module1 function 里面的变量了,从而也不会修改变量或者是覆盖同名变量了,但是还是有缺陷的,module1这个的变量还是暴露到全局了,而去随着模块的增多,全局变量会越来越多。
5、全局引入
像jquery库使用的全局引入。和匿名闭包函数相似,只是传入全局变量的方法不同

(function(window){var test1='aaaaaa';window.testFun=function(){//通过给window添加属性而暴漏到全局console.log(test1);}
}(window));

通过匿名函数包装代码,所依赖的外部变量传给这个函数,在函数内部可以使用这些依赖,然后在函数的最后把模块自身暴漏给window。

3,4,5解决方法都是通过定一个全局变量来把所有的代码包含在一个函数内,由此来创建私有的命名空间和闭包作用域。

(2)软件中的模块化开发

一个功能就是一个模块,多个模块可以组成完整应用,抽离一个模块不会影响其他功能的运行。

(3)Node.js中的模块化开发规范

Node.js规定一个JavaScript文件就是一个模块,模块内部定义的变量和函数默认情况下在外部无法得到

模块内部可以使用exports对象进行成员导出, 使用require方法导入其他模块。

在这里插入图片描述

模块成员导出

 // a.js// 在模块内部定义变量let version = 1.0;// 在模块内部定义方法const sayHi = name => `您好, ${name}`;// 向模块外部导出数据 exports.version = version;exports.sayHi = sayHi;

模块成员的导入

  // b.js// 在b.js模块中导入模块alet a = require('./b.js');// 输出b模块中的version变量console.log(a.version);// 调用b模块中的sayHi方法 并输出其返回值console.log(a.sayHi('黑马讲师')); 
//导入模块时后缀可以省略

模块成员导出的另一种方式

module.exports.version = version;
module.exports.sayHi = sayHi;

exportsmodule.exports的别名(地址引用关系),导出对象最终以module.exports为准

模块导出两种方式的联系与区别

在这里插入图片描述

4、系统模块

(1)什么是系统模块

Node运行环境提供的API. 因为这些API都是以模块化的方式进行开发的, 所以我们又称Node运行环境提供的API为系统模块

例:文件模块

在这里插入图片描述

(2)系统模板fs文件操作

f:file 文件 ,s:system 系统,文件操作系统。

const fs = require('fs');

读取文件内容

fs.reaFile('文件路径/文件名称'[,'文件编码'], callback);

注:callback 为回调函数

示例:

// 1.通过模块的名字fs对模块进行引用
const fs = require('fs');// 2.通过模块内部的readFile读取文件内容
fs.readFile('./01.helloworld.js', 'utf8', (err, doc) => {// 如果文件读取出错err 是一个对象 包含错误信息// 如果文件读取正确 err是 null// doc 是文件读取的结果console.log(err);console.log(doc);
});

在这里插入图片描述

写入文件内容

fs.writeFile('文件路径/文件名称', '数据', callback);
 const content = '<h3>正在使用fs.writeFile写入文件内容</h3>';fs.writeFile('../index.html', content, err => {if (err != null) { console.log(err);return;}console.log('文件写入成功');});

在这里插入图片描述

(3)系统模块path 路径操作

为什么要进行路径拼接

  • 不同操作系统的路径分隔符不统一
  • /public/uploads/avatar
  • Windows 上是 \ /
  • Linux 上是 /

路径拼接语法

path.join('路径', '路径', ...)
  // 导入path模块const path = require('path');// 路径拼接let finialPath = path.join('itcast', 'a', 'b', 'c.css');// 输出结果 itcast\a\b\c.cssconsole.log(finialPath);
// public/uploads/avatar
const path = require('path');const finalPath = path.join('public', 'uploads','avatar');console.log(finalPath);

在这里插入图片描述

相对路径VS绝对路径

  • 大多数情况下使用绝对路径,因为相对路径有时候相对的是命令行工具的当前工作目录
  • 在读取文件或者设置文件路径时都会选择绝对路径
  • 使用__dirname获取当前文件所在的绝对路径
const fs = require('fs');
const path = require('path');console.log(__dirname);
console.log(path.join(__dirname, '01.helloworld.js'))fs.readFile(path.join(__dirname, '01.helloworld.js'), 'utf8', (err, doc) => {console.log(err)console.log(doc)
});

在这里插入图片描述

5、第三方模块

(1)什么是第三方模块

别人写好的、具有特定功能的、我们能直接使用的模块即第三方模块,由于第三方模块通常都是由多个文件组成并且被放置在一个文件夹中,所以又名包。

第三方模块有两种存在形式:

  • 以js文件的形式存在,提供实现项目具体功能的API接口。
  • 以命令行工具形式存在,辅助项目开发

(2)获取第三方模块

npmjs.com:第三方模块的存储和分发仓库

在这里插入图片描述

npm (node package manager) : node的第三方模块管理工具

  • 下载:npm install 模块名称
  • 卸载:npm unintall package 模块名称

全局安装与本地安装

  • 命令行工具:全局安装
  • 库文件:本地安装

(3)第三方模块 nodemon

nodemon是一个命令行工具,用以辅助项目开发。
在Node.js中,每次修改文件都要在命令行工具中重新执行该文件,非常繁琐。

使用步骤

  1. 使用npm install nodemon –g 下载它
  2. 在命令行工具中用nodemon命令替代node命令执行文件

在这里插入图片描述

(4)第三方模块 nrm

nrm ( npm registry manager ):npm下载地址切换工具

npm默认的下载地址在国外,国内下载速度慢

使用步骤

  1. 使用npm install nrm –g 下载它
  2. 查询可用下载地址列表 nrm ls
  3. 切换npm下载地址 nrm use 下载地址名称

在这里插入图片描述

(5)第三方模块 Gulp

基于node平台开发的前端构建工具
将机械化操作编写成任务, 想要执行机械化操作时执行一个命令行命令任务就能自动执行了
用机器代替手工,提高开发效率。

(6)Gulp能做什么

  • 项目上线,HTML、CSS、JS文件压缩合并
  • 语法转换(es6、less …)
  • 公共文件抽离
  • 修改文件浏览器自动刷新

(7)Gulp使用

  1. 使用npm install gulp下载gulp库文件
  2. 在项目根目录下建立gulpfile.js文件
  3. 重构项目的文件夹结构 src目录放置源代码文件 dist目录放置构建后文件
  4. 在gulpfile.js文件中编写任务.
  5. 在命令行工具中执行gulp任务

(8)Gulp中提供的方法

gulp.src():获取任务要处理的文件
gulp.dest():输出文件
gulp.task():建立gulp任务
gulp.watch():监控文件的变化

 const gulp = require('gulp');// 使用gulp.task()方法建立任务gulp.task('first', () => {// 获取要处理的文件gulp.src('./src/css/base.css') // 将处理后的文件输出到dist目录.pipe(gulp.dest('./dist/css'));});
// 引用gulp模块
const gulp = require('gulp');
const htmlmin = require('gulp-htmlmin');
const fileinclude = require('gulp-file-include');
const less = require('gulp-less');
const csso = require('gulp-csso');
const babel = require('gulp-babel');
const uglify = require('gulp-uglify');
// 使用gulp.task建立任务
// 1.任务的名称
// 2.任务的回调函数
gulp.task('first', () => {console.log('我们人生中的第一个gulp任务执行了');// 1.使用gulp.src获取要处理的文件gulp.src('./src/css/base.css').pipe(gulp.dest('dist/css'));
});// html任务
// 1.html文件中代码的压缩操作
// 2.抽取html文件中的公共代码
gulp.task('htmlmin', () => {gulp.src('./src/*.html').pipe(fileinclude())// 压缩html文件中的代码.pipe(htmlmin({ collapseWhitespace: true })).pipe(gulp.dest('dist'));
});// css任务
// 1.less语法转换
// 2.css代码压缩
gulp.task('cssmin', () => {// 选择css目录下的所有less文件以及css文件gulp.src(['./src/css/*.less', './src/css/*.css'])// 将less语法转换为css语法.pipe(less())// 将css代码进行压缩.pipe(csso())// 将处理的结果进行输出.pipe(gulp.dest('dist/css'))
});// js任务
// 1.es6代码转换
// 2.代码压缩
gulp.task('jsmin', () => {gulp.src('./src/js/*.js').pipe(babel({// 它可以判断当前代码的运行环境 将代码转换为当前运行环境所支持的代码presets: ['@babel/env']})).pipe(uglify()).pipe(gulp.dest('dist/js'))
});// 复制文件夹
gulp.task('copy', () => {gulp.src('./src/images/*').pipe(gulp.dest('dist/images'));gulp.src('./src/lib/*').pipe(gulp.dest('dist/lib'))
});// 构建任务
gulp.task('default', ['htmlmin', 'cssmin', 'jsmin', 'copy']);

在这里插入图片描述

当任务名为:default时,可以只写gulp

在这里插入图片描述

注:gulp.pipe:**

首先,gulp的源码里没有任何一部分是定义pipe的。

gulp的pipe方法是来自nodejs stream API的。
gulp本身是由一系列vinyl模块组织起来的。

pipe方法到底是什么呢?

pipe跟他字面意思一样只是一个管道

例如我有一堆文件

var s = gulp.src(["fileA","fileB","fileC"])

src方法实际上是'vinyl-fs'模块的方法,选择一系列文件并创建可读流(readableStream)。

返回的是由从这些文件而来的流(stream)

既然是Stream,自然少不了最常用的pipe的方法。
s.pipe(fn)

pipe方法传入方法的是一个function,这个function作用无非是接受上一个流(stream)的结果,并返回一个处理后流的结果(返回值应该是一个stream对象)。
注意的是这个函数只是一个包装,并不是会直接操作文件的。

管道与Stream

也就是说pipe本身只是定义了管道的组织情况,管道本身的具体结构(Stream对象)
,是需要开发者自己去设计的。
pipe方法只负责返回这个管道结构(Stream对象)
楼主想要窥探管道里的内容,就要创建一个Stream对象,在Stream对象接收结果的方法里把流里的内容log出来即可

Stream与File

注意的是gulp里的流的file必须是vinyl对象

var File = require("gulp-utils").File//或者var File = require("vinyl") var myf = new File()myf.contents = new Buffer("haha")

(9)Gulp插件

  • gulp-htmlmin :html文件压缩
  • gulp-csso :压缩css
  • gulp-babel :JavaScript语法转化
  • gulp-less: less语法转化
  • gulp-uglify :压缩混淆JavaScript
  • gulp-file-include 公共文件包含
  • browsersync 浏览器实时同步

6、package.json

(1)node_modules文件夹的问题

  1. 文件夹以及文件过多过碎,当我们将项目整体拷贝给别人的时候,,传输速度会很慢很慢.
  2. 复杂的模块依赖关系需要被记录,确保模块的版本和当前保持一致,否则会导致当前项目运行报错

(2)package.json文件的作用

项目描述文件,记录了当前项目信息,例如项目名称、版本、作者、github地址、当前项目依赖了哪些第三方模块等。
使用npm init -y命令生成。

(3)项目依赖

  • 在项目的开发阶段和线上运营阶段,都需要依赖的第三方包,称为项目依赖
  • 使用npm install 包名命令下载的文件会默认被添加到 package.json 文件的 dependencies 字段中
 {"dependencies": {"jquery": "^3.3.1“}} 

(4)开发依赖

  • 在项目的开发阶段需要依赖,线上运营阶段不需要依赖的第三方包,称为开发依赖
  • 使用npm install 包名 --save-dev命令将包添加到package.json文件的devDependencies字段中
 {"devDependencies": {"gulp": "^3.9.1“}} 

(5)package-lock.json文件的作用

  • 锁定包的版本,确保再次下载时不会因为包版本不同而产生问题
  • 加快下载速度,因为该文件中已经记录了项目所依赖第三方包的树状结构和包的下载地址,重新安装时只需下载即可,不需要做额外的工作

7、Node.js中模块加载机制

(1)模块查找规则-当模块拥有路径但没有后缀时

在这里插入图片描述

  1. require方法根据模块路径查找模块,如果是完整路径,直接引入模块。
  2. 如果模块后缀省略,先找同名JS文件再找同名JS文件夹
  3. 如果找到了同名文件夹,找文件夹中的index.js
  4. 如果文件夹中没有index.js就会去当前文件夹中的package.json文件中查找main选项中的入口文件
  5. 如果找指定的入口文件不存在或者没有指定入口文件就会报错,模块没有被找到

(2)模块查找规则-当模块没有路径且没有后缀时

  1. Node.js会假设它是系统模块
  2. Node.js会去node_modules文件夹中
  3. 首先看是否有该名字的JS文件
  4. 再看是否有该名字的文件夹
  5. 如果是文件夹看里面是否有index.js
  6. 如果没有index.js查看该文件夹中的package.json中的main选项确定模块入口文件
  7. 否则找不到报错

8、Web服务器端

(1)服务器端基础概念

网站的组成

网站应用程序主要分为两大部分:客户端和服务器端。
客户端:在浏览器中运行的部分,就是用户看到并与之交互的界面程序。使用HTML、CSS、JavaScript构建。
服务器端:在服务器中运行的部分,负责存储数据和处理应用逻辑。

在这里插入图片描述

Node网站服务器

能够提供网站访问服务的机器就是网站服务器,它能够接收客户端的请求,能够对请求做出响应。

在这里插入图片描述

IP地址

互联网中设备的唯一标识。
IP是Internet Protocol Address的简写,代表互联网协议地址.

在这里插入图片描述

域名

由于IP地址难于记忆,所以产生了域名的概念,所谓域名就是平时上网所使用的网址。
http://www.baidu.com => http://124.165.219.100/ (乱写的)
虽然在地址栏中输入的是网址, 但是最终还是会将域名转换为ip才能访问到指定的网站服务器。

端口

端口是计算机与外界通讯交流的出口,用来区分服务器电脑中提供的不同的服务。

在这里插入图片描述

URL

统一资源定位符,又叫URL(Uniform Resource Locator),是专为标识Internet网上资源位置而设的一种编址方式,我们平时所说的网页地址指的即是URL。

URL的组成

传输协议://服务器IP或域名:端口/资源所在位置标识

https://me.csdn.net/wuyxinu

http:超文本传输协议,提供了一种发布和接收HTML页面的方法。

开发过程中客户端和服务器端说明

在开发阶段,客户端和服务器端使用同一台电脑,即开发人员电脑。

在这里插入图片描述

本机域名:localhost
本地IP :127.0.0.1

(2)创建web服务器

  // 引用系统模块const http = require('http');// 创建web服务器const app = http.createServer();// 当客户端发送请求的时候app.on('request', (req, res) => {//  响应res.end('<h1>hi, user</h1>');});// 监听3000端口app.listen(3000);console.log('服务器已启动,监听3000端口,请访问 localhost:3000')

9、HTTP协议

(1)HTTP协议的概念

超文本传输协议(英文:HyperText Transfer Protocol,缩写:HTTP)规定了如何从网站服务器传输超文本到本地浏览器,它基于客户端服务器架构工作,是客户端(用户)和服务器端(网站)请求和应答的标准。

在这里插入图片描述

(2)报文

在HTTP请求和响应的过程中传递的数据块就叫报文,包括要传送的数据和一些附加信息,并且要遵守规定好的格式。

在这里插入图片描述

(3)请求报文

  1. 请求方式 (Request Method)

    • GET 请求数据
    • POST 发送数据
  2. 请求地址 (Request URL)

 app.on('request', (req, res) => {req.headers  // 获取请求报文req.url      // 获取请求地址req.method   // 获取请求方法});

(4)响应报文

  1. HTTP状态码
  • 200 请求成功
  • 404 请求的资源没有被找到
  • 500 服务器端错误
  • 400 客户端请求有语法错误
  1. 内容类型
  • text/html
  • text/css
  • application/javascript
  • image/jpeg
  • application/json
 app.on('request', (req, res) => {// 设置响应报文res.writeHead(200, {         'Content-Type': 'text/html;charset=utf8‘});});

(5)HTTP请求与响应处理

请求参数

客户端向服务器端发送请求时,有时需要携带一些客户信息,客户信息需要通过请求参数的形式传递到服务器端,比如登录操作。

在这里插入图片描述

GET请求参数
  • 参数被放置在浏览器地址栏中,例如:http://localhost:3000/?name=zhangsan&age=20
  • 参数获取需要借助系统模块url,url模块用来处理url地址
 const http = require('http');// 导入url系统模块 用于处理url地址const url = require('url');const app = http.createServer();app.on('request', (req, res) => {// 将url路径的各个部分解析出来并返回对象// true 代表将参数解析为对象格式let {query} = url.parse(req.url, true);console.log(query);});app.listen(3000);

app.js

// 用于创建网站服务器的模块
const http = require('http');
// 用于处理url地址
const url = require('url');
// app对象就是网站服务器对象
const app = http.createServer();
// 当客户端有请求来的时候
app.on('request', (req, res) => {// 获取请求方式// req.method// console.log(req.method);// 获取请求地址// req.url// console.log(req.url);// 获取请求报文信息// req.headers// console.log(req.headers['accept']);res.writeHead(200, {'content-type': 'text/html;charset=utf8'});console.log(req.url);// 1) 要解析的url地址// 2) 将查询参数解析成对象形式let { query, pathname } = url.parse(req.url, true);console.log(query.name)console.log(query.age)if (pathname == '/index' || pathname == '/') {res.end('<h2>欢迎来到首页</h2>');}else if (pathname == '/list') {res.end('welcome to listpage');}else {res.end('not found');}if (req.method == 'POST') {res.end('post')} else if (req.method == 'GET') {res.end('get')}// res.end('<h2>hello user</h2>');
});
// 监听端口
app.listen(3000);
console.log('网站服务器启动成功');
​```
POST请求参数
  • 参数被放置在请求体中进行传输
  • 获取POST参数需要使用data事件和end事件
  • 使用querystring系统模块将参数转换为对象格式
 // 导入系统模块querystring 用于将HTTP参数转换为对象格式const querystring = require('querystring');app.on('request', (req, res) => {let postData = '';// 监听参数传输事件req.on('data', (chunk) => postData += chunk;);// 监听参数传输完毕事件req.on('end', () => { console.log(querystring.parse(postData)); }); });

post.js

// 用于创建网站服务器的模块
const http = require('http');
// app对象就是网站服务器对象
const app = http.createServer();
// 处理请求参数模块
const querystring = require('querystring');
// 当客户端有请求来的时候
app.on('request', (req, res) => {// post参数是通过事件的方式接受的// data 当请求参数传递的时候出发data事件// end 当参数传递完成的时候出发end事件let postParams = '';req.on('data', params => {postParams += params;});req.on('end', () => {console.log(querystring.parse(postParams));});res.end('ok');});
// 监听端口
app.listen(3000);
console.log('网站服务器启动成功');
路由

http://localhost:3000/index
http://localhost:3000/login
路由是指客户端请求地址与服务器端程序代码的对应关系。简单的说,就是请求什么响应什么。
在这里插入图片描述

 // 当客户端发来请求的时候app.on('request', (req, res) => {// 获取客户端的请求路径let { pathname } = url.parse(req.url);if (pathname == '/' || pathname == '/index') {res.end('欢迎来到首页');} else if (pathname == '/list') {res.end('欢迎来到列表页');} else {res.end('抱歉, 您访问的页面出游了');}});
// 1.引入系统模块http
// 2.创建网站服务器
// 3.为网站服务器对象添加请求事件
// 4.实现路由功能
// 	1.获取客户端的请求方式
// 	2.获取客户端的请求地址
const http = require('http');
const url = require('url');const app = http.createServer();app.on('request', (req, res) => {// 获取请求方式const method = req.method.toLowerCase();// 获取请求地址const pathname = url.parse(req.url).pathname;res.writeHead(200, {'content-type': 'text/html;charset=utf8'});if (method == 'get') {if (pathname == '/' || pathname == '/index') {res.end('欢迎来到首页')}else if (pathname == '/list') {res.end('欢迎来到列表页')}else {res.end('您访问的页面不存在')}}else if (method == 'post') {}});app.listen(3000);
console.log('服务器启动成功')
静态资源

服务器端不需要处理,可以直接响应给客户端的资源就是静态资源,例如CSS、JavaScript、image文件。

https://i0.hdslb.com/bfs/sycp/creative_img/201912/181eb851056893891f579c4ebb083f60.jpg

在这里插入图片描述

const http = require('http');
const url = require('url');
const path = require('path');
const fs = require('fs');
const mime = require('mime');const app = http.createServer();app.on('request', (req, res) => {// 获取用户的请求路径let pathname = url.parse(req.url).pathname;pathname = pathname == '/' ? '/default.html' : pathname;// 将用户的请求路径转换为实际的服务器硬盘路径let realPath = path.join(__dirname, 'public' + pathname);let type = mime.getType(realPath)// 读取文件fs.readFile(realPath, (error, result) => {// 如果文件读取失败if (error != null) {res.writeHead(404, {'content-type': 'text/html;charset=utf8'})res.end('文件读取失败');return;}res.writeHead(200, {'content-type': type})res.end(result);});
});app.listen(3000);
console.log('服务器启动成功')

动态资源

相同的请求地址不同的响应资源,这种资源就是动态资源。

客户端请求途径

  1. GET方式
  • 浏览器地址栏
  • link标签的href属性
  • script标签的src属性
  • img标签的src属性
  • Form表单提交
  1. POST方式
  • Form表单提交

在这里插入图片描述

10、Node.js异步编程

(1)同步API,异步API

同步API:只有当前API执行完成后,才能继续执行下一个API

console.log('before'); 
console.log('after');

异步API:当前API的执行不会阻塞后续代码的执行

console.log('before');
setTimeout(() => { console.log('last');
}, 2000);
console.log('after');

在这里插入图片描述

(2)同步API, 异步API的区别( 获取返回值 )

同步API可以从返回值中拿到API执行的结果, 但是异步API是不可以的

    // 同步function sum (n1, n2) { return n1 + n2;} const result = sum (10, 20);
    // 异步function getMsg () { setTimeout(function () { return { msg: 'Hello Node.js' }}, 2000);}const msg = getMsg ();console.log(msg);

在这里插入图片描述

function getMsg (callback) {setTimeout(function () {callback({msg: 'hello node.js'})}, 2000)
}getMsg(function (data) {console.log(data);
});

在这里插入图片描述

(3)回调函数

自己定义函数让别人去调用。

  // getData函数定义function getData (callback) {}// getData函数调用getData (() => {});
function getData (callback) {callback('123')
}getData(function (n) {console.log('callback函数被调用了')console.log(n)
});

在这里插入图片描述

(4)使用回调函数获取异步API执行结果

function getMsg (callback) {setTimeout(function () {callback ({ msg: 'Hello Node.js' })}, 2000);
}
getMsg (function (msg) { console.log(msg);
});

(5)同步API, 异步API的区别(代码执行顺序)

同步API从上到下依次执行,前面代码会阻塞后面代码的执行

for (var i = 0; i < 100000; i++) { console.log(i);
}
console.log('for循环后面的代码');

异步API不会等待API执行完成后再向下执行代码

console.log('代码开始执行'); 
setTimeout(() => { console.log('2秒后执行的代码')}, 2000);
setTimeout(() => { console.log('"0秒"后执行的代码')}, 0); 
console.log('代码结束执行');

在这里插入图片描述

(6)代码执行顺序分析

console.log('代码开始执行');
setTimeout(() => {console.log('2秒后执行的代码');
}, 2000); 
setTimeout(() => {console.log('"0秒"后执行的代码');
}, 0);
console.log('代码结束执行');

在这里插入图片描述

在这里插入图片描述

(7)Node.js中的异步API

 fs.readFile('./demo.txt', (err, result) => {});
 var server = http.createServer();server.on('request', (req, res) => {});

如果异步API后面代码的执行依赖当前异步API的执行结果,但实际上后续代码在执行的时候异步API还没有返回结果,这个问题要怎么解决呢?

fs.readFile('./demo.txt', (err, result) => {});
console.log('文件读取结果');

需求:依次读取A文件、B文件、C文件

回调地狱:

const fs = require('fs');fs.readFile('./1.txt', 'utf8', (err, result1) => {console.log(result1)fs.readFile('./2.txt', 'utf8', (err, result2) => {console.log(result2)fs.readFile('./3.txt', 'utf8', (err, result3) => {console.log(result3)})})
});

在这里插入图片描述

(8)Promise

Promise出现的目的是解决Node.js异步编程中回调地狱的问题。

let promise = new Promise((resolve, reject) => {setTimeout(() => {if (true) {resolve({name: '张三'})}else {reject('失败了') } }, 2000);
});
promise.then(result => console.log(result); // {name: '张三'}).catch(error => console.log(error); // 失败了)
const fs = require('fs');let promise = new Promise((resolve, reject) => {//fs.readFile('./1.txt', 'utf8', (err, result) => {fs.readFile('./100.txt', 'utf8', (err, result) => {if (err != null) {reject(err);}else {resolve(result);}});});promise.then((result) => {console.log(result);
})
.catch((err)=> {console.log(err);
})

在这里插入图片描述

const fs = require('fs');// fs.readFile('./1.txt', 'utf8', (err, result1) => {
// 	console.log(result1)
// 	fs.readFile('./2.txt', 'utf8', (err, result2) => {
// 		console.log(result2)
// 		fs.readFile('./3.txt', 'utf8', (err, result3) => {
// 			console.log(result3)
// 		})
// 	})
// });function p1 () {return new Promise ((resolve, reject) => {fs.readFile('./1.txt', 'utf8', (err, result) => {resolve(result)})});
}function p2 () {return new Promise ((resolve, reject) => {fs.readFile('./2.txt', 'utf8', (err, result) => {resolve(result)})});
}function p3 () {return new Promise ((resolve, reject) => {fs.readFile('./3.txt', 'utf8', (err, result) => {resolve(result)})});
}p1().then((r1)=> {console.log(r1);return p2();
})
.then((r2)=> {console.log(r2);return p3();
})
.then((r3) => {console.log(r3)
})

在这里插入图片描述

(9)异步函数

异步函数是异步编程语法的终极解决方案,它可以让我们将异步代码写成同步的形式,让代码不再有回调函数嵌套,使代码变得清晰明了。

const fn = async () => {};
async function fn () {}

async关键字

  1. 普通函数定义前加async关键字 普通函数变成异步函数

  2. 异步函数默认返回promise对象

  3. 在异步函数内部使用return关键字进行结果返回 结果会被包裹的promise对象中 return关键字代替了resolve方法

  4. 在异步函数内部使用throw关键字抛出程序异常

  5. 调用异步函数再链式调用then方法获取异步函数执行结果

  6. 调用异步函数再链式调用catch方法获取异步函数执行的错误信息

// 1.在普通函数定义的前面加上async关键字 普通函数就变成了异步函数
// 2.异步函数默认的返回值是promise对象
// 3.在异步函数内部使用throw关键字进行错误的抛出
// 
// await关键字
// 1.它只能出现在异步函数中
// 2.await promise 它可以暂停异步函数的执行 等待promise对象返回结果后再向下执行函数// async function fn () {
// 	throw '发生了一些错误';
// 	return 123;
// }// // console.log(fn ())
// fn ().then(function (data) {
// 	console.log(data);
// }).catch(function (err){
// 	console.log(err);
// })async function p1 () {return 'p1';
}async function p2 () {return 'p2';
}async function p3 () {return 'p3';
}async function run () {let r1 = await p1()let r2 = await p2()let r3 = await p3()console.log(r1)console.log(r2)console.log(r3)
}run();

在这里插入图片描述

await关键字

  1. await关键字只能出现在异步函数中

  2. await promise await后面只能写promise对象 写其他类型的API是不不可以的

  3. await关键字可是暂停异步函数向下执行 直到promise返回结果

const fs = require('fs');
// 改造现有异步函数api 让其返回promise对象 从而支持异步函数语法
const promisify = require('util').promisify;
// 调用promisify方法改造现有异步API 让其返回promise对象
const readFile = promisify(fs.readFile);async function run () {let r1 = await readFile('./1.txt', 'utf8')let r2 = await readFile('./2.txt', 'utf8')let r3 = await readFile('./3.txt', 'utf8')console.log(r1)console.log(r2)console.log(r3)
}run();

在这里插入图片描述

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

相关文章

  1. 《Node.js入门经典》一2.12 练习

    本节书摘来自异步社区《Node.js入门经典》一书中的第2章,第2.12节,作者【英】George Ornbo,更多章节内容可以访问云栖社区“异步社区”公众号查看 2.12 练习 Node.js入门经典1.使用本章所描述的一个工具搜索“template engine”,并尝试评估一下哪个最流行。 2.使用本章所…...

    2024/4/24 13:21:43
  2. 《Node.js入门经典》一2.7 如何找模块文档

    本节书摘来自异步社区《Node.js入门经典》一书中的第2章,第2.7节,作者【英】George Ornbo,更多章节内容可以访问云栖社区“异步社区”公众号查看 2.7 如何找模块文档 Node.js入门经典在知道如何安装与寻找模块之后,我们还需要知道如何使用它们。通常来讲,Node.js模块都有…...

    2024/4/24 13:21:43
  3. node.js入门1.0安装与搭建第一个服务器

    node.js入门1.0node.js是js的一种框架.主要应用于高并发响应式WEB应用,解决了传统式阻塞式处理方式-更改连接服务器的方式。在什么情况下使用?---为了避免等待。获取,安装和配置node.js:windows7 64位node.js 安装:双击下载好的msi文件即可进行安装,点next即可。详情在这里…...

    2024/4/24 13:21:45
  4. 入门 node.js 你必须知道的那些事

    译者:hkhttps://segmentfault.com/a/1190000012066000最基本的一些操作和概念用 node 执行一段 js 代码在命令行中用 cd 切换到桌面创建一个文件夹和并用 cd 命令切换到这个文件夹mkdir nodeTest && cd nodeTest创建一个 js 文件并写上简单的 js 代码 touch a.js v…...

    2024/4/24 13:21:41
  5. 入门node.js第一个应用实例

    入门node.js第一个应用实例 在创建实例之前,先了解nodejs应用一般由那几部分组成: 1.引入 required 模块:我们可以使用 require 指令来载入 Node.js 模块。 var http=require("http");2.创建服务器:服务器可以监听客户端的请求,类似于 Apache 、Nginx 等 HTTP 服…...

    2024/4/24 13:21:40
  6. 《Node.js入门经典》一1.4 小结

    本节书摘来自异步社区《Node.js入门经典》一书中的第1章,第1.4节,作者【英】George Ornbo,更多章节内容可以访问云栖社区“异步社区”公众号查看 1.4 小结 Node.js入门经典好极了!你刚刚创建并运行了第一个Node.js程序。虽然你现在不太可能以Internet百万富翁的身份退休,…...

    2024/4/24 13:21:38
  7. Node.js 入门

    章节Node.js 介绍 Node.js 入门 Node.js 模块 Node.js HTTP模块 Node.js 文件系统模块 Node.js URL模块 Node.js NPM Node.js 事件 Node.js 上传文件 Node.js 发送Email下载 Node.js Node.js官方网站有安装说明: https://nodejs.org Hello World 下载并安装了Node.js之后,让我…...

    2024/4/24 13:21:37
  8. 无脑操作vs code 搭建node.js环境

    作为开发经常要用到node.js,新手不知道如何去安装,那么今天就说说非常简单的安装方法。1.下载node.js 在这里特别说明下,博主希望下载奇数版本的,奇数版本是稳定版的,利于开发。node.js下载地址 我这里就以node.js 10.4.1版本来说了 2.下载好后 以管理员身份打开安装包(部…...

    2024/4/24 13:21:40
  9. Vue笔记——node.js入门知识

    一、node.js是什么 首先我们需要明确一点,node.js肯定是和JavaScript这一门编程语言有关系的,但是node.js不是一门编程语言,如果你把node.js当做是一门类似于PHP、JAVA、Python这样的后台编程语言,那么你就错了。node.js也不是JavaScript的第三方库或框架,不同于我们经常使…...

    2024/4/24 13:21:38
  10. node.js入门及安装

    1.介绍:什么是node.js? node.js就是服务器端的JavaScript。 原来没有node.js的原因是因为JavaScript原型速度太慢再加上js书写没有那么规范,所以没人用js服务器的语言。 谷歌写出了一款V8引擎,大大提高了js的循行效率。再加上common。js(书写js的一种规范)所以node.js…...

    2024/4/18 17:49:17
  11. Nodejs 快速入门教程

    node.js入门教程nodejs和npm的安装 体验一下 Hello World 之 Node.js 基础之Npm使用 Node之模块 熟悉常用的内置模块 express框架1. nodejs和npm的安装 可从Node.js官网,下载对应平台的nodejs版本进行安装,(window系统,可勾选Add to Path 添加到环境变量中) 在命令行界面输入…...

    2024/4/15 4:03:04
  12. 想用好 Node.js?这 5 个经典国产项目值得细品

    凭借着高并发性能优秀、异步事件驱动、入门简单等优势,Node.js 受到了不少开发者们的青睐。但不得不承认的是,如果用不好 Node.js,它的坑就会非常多,为了帮助各位 Node.js 的开发者们更灵活地使用它,Gitee 为大家推荐以下 5 个高 Star 数开源项目。1.pdmanPDMan是一款开源…...

    2024/4/15 4:03:03
  13. node.js入门之helloworld

    介绍这是我的关于Node.js系列入门教程的第一篇。必须说明一下,我并不是Node.js的专家,但是尝试向别人解释这是怎么回事是自我学习的一个好方法。如果你发现有些地方并不是那么正确,请提出来让我知道以便修正,谢之。最近Node.js如此流行,到处是讨论这个的话题,我决定一探究…...

    2024/4/15 4:03:02
  14. 从文件上传开始, 进入node.js的世界

    什么是node.js, 以及node.js的生态系统,InfQ上这篇介绍的很完整:<虚拟研讨会:Node.js生态系统之框架、库、最佳实践>node.js的相关资源: node.js中文社区: http://cnodejs.org/Node.js入门教程(E文):http://nodebeginner.org/中文用户手册: http://cnodejs.org/cman/nod…...

    2024/4/15 4:03:01
  15. 很棒的node.js入门学习材料

    专从名字说起 有关Node.js的技术报道越来越多,Node.js的写法也是五花八门,有写成NodeJS的,有写成Nodejs的,到底哪一种写法最标准呢,我们不妨遵循官方的说法。在Node.js的官方网站上,一直将其项目称之为”Node“或者”Node.js“,没有发现其他的说法,”Node“用的最多,考…...

    2024/4/20 7:41:20
  16. Node.js入门,第一个APP,Hello World

    在安装好Node后,尝试写了第一个APP,那就是万年不变的HelloWorld//require表示引包,引包就是引用自己的一个特殊功能 var http=require(http); //创建服务器,参数是一个回调函数,表示如果有请求进来,要做什么 var server=http.createServer(function(req,res){//req表示请…...

    2024/5/3 1:45:14
  17. Node.js入门教程 第一篇 (概念原理及环境配置)

    注:为了本教程的准确性,部分描述引用了官网及网络内容。Node.js 概念Node.js本质上是使用Google的V8引擎制作出来的服务框架。V8本身是Google为了解决Chrome浏览器的性能问题而制作的前端引擎(开源)。本身依托于浏览器引擎,这也是为什么Node.js使用的是前端的JavaScript语…...

    2024/4/15 4:02:58
  18. 01Node.js安装,创建例子

    版本:偶数位为稳定版本,基数为非稳定版本- 0.6.x      - 0.7.x- 0.8.x      -0.9.x-0.10.x      -0.11.x概念:Node.js采用谷歌浏览器的V8引擎,用C++语言编写的JavaScript语言运行环境。优点:可以解析JS代码,没有浏览器安全级的限制;Node适用于高并发,…...

    2024/4/24 13:21:34
  19. 《Node.js入门经典》一2.9 小结

    本节书摘来自异步社区《Node.js入门经典》一书中的第2章,第2.9节,作者【英】George Ornbo,更多章节内容可以访问云栖社区“异步社区”公众号查看 2.9 小结 Node.js入门经典在本章中,我们学习了如何安装Node.js的包管理器npm。此外,也学习了如何使用npm安装模块以及如何在…...

    2024/5/3 11:04:46
  20. 《Node.js入门经典》一第 2 章 npm(Node包管理器)2.1 npm是什么

    本节书摘来自异步社区《Node.js入门经典》一书中的第2章,第2.1节,作者【英】George Ornbo,更多章节内容可以访问云栖社区“异步社区”公众号查看第 2 章 npm(Node包管理器)Node.js入门经典在本章中你将学到: 使用npm为Node.js安装模块; 为Node.js的应用程序查找模块; …...

    2024/4/24 13:21:32

最新文章

  1. Spring Boot可以同时处理多少请求?

    Spring Boot本身对并发请求的处理能力没有明确的限制。Spring Boot的并发处理能力通常受到以下因素影响&#xff1a; 服务器硬件&#xff1a;包括CPU核心数、内存大小等。JVM配置&#xff1a;堆内存、永久代或元空间大小等。Web服务器&#xff1a;Spring Boot 默认使用嵌入式的…...

    2024/5/3 14:32:37
  2. 梯度消失和梯度爆炸的一些处理方法

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

    2024/3/20 10:50:27
  3. C# 构建可定时关闭的异步提示弹窗

    C# 构建可定时关闭的异步提示弹窗 引言1、调用接口的实现2、自动定时窗口的实现 引言 我们在最常用最简单的提示弹框莫过于MessageBox.Show( )的方法了&#xff0c;但是使用久了之后&#xff0c;你会发现这个MessageBox并不是万能的&#xff0c;有事后并不想客户去点击&#x…...

    2024/5/3 5:57:39
  4. Java-运算符

    运算符 Java语言支持如下运算符&#xff1a; 算术运算符&#xff1a;&#xff0c;-&#xff0c;*&#xff0c;/&#xff0c;%&#xff0c;&#xff0c;--复制运算符&#xff1a;关系运算符&#xff1a;>, <, >, <, , !instanceof逻辑运算符&#xff1a;&&…...

    2024/5/2 14:40:28
  5. JVM专题——类文件结构

    本文部分内容节选自Java Guide和《深入理解Java虚拟机》, Java Guide地址: https://javaguide.cn/java/jvm/class-file-structure.html &#x1f680; 基础&#xff08;上&#xff09; → &#x1f680; 基础&#xff08;中&#xff09; → &#x1f680;基础&#xff08;下&am…...

    2024/5/1 7:18:39
  6. 【外汇早评】美通胀数据走低,美元调整

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

    2024/5/1 17:30:59
  7. 【原油贵金属周评】原油多头拥挤,价格调整

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

    2024/5/2 16:16:39
  8. 【外汇周评】靓丽非农不及疲软通胀影响

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

    2024/4/29 2:29:43
  9. 【原油贵金属早评】库存继续增加,油价收跌

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

    2024/5/2 9:28:15
  10. 【外汇早评】日本央行会议纪要不改日元强势

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

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

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

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

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

    2024/4/28 1:28:33
  13. 【原油贵金属早评】波动率飙升,市场情绪动荡

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

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

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

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

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

    2024/5/2 15:04:34
  16. 【外汇早评】美伊僵持,风险情绪继续升温

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

    2024/4/28 1:34:08
  17. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

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

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

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

    2024/4/29 20:46:55
  19. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

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

    2024/4/30 22:21:04
  20. 氧生福地 玩美北湖(下)——奔跑吧骚年!

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

    2024/5/1 4:32:01
  21. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

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

    2024/4/27 23:24:42
  22. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

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

    2024/4/28 5:48:52
  23. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

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

    2024/4/30 9:42:22
  24. 广州械字号面膜生产厂家OEM/ODM4项须知!

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

    2024/5/2 9:07:46
  25. 械字号医用眼膜缓解用眼过度到底有无作用?

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

    2024/4/30 9:42:49
  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