nodejs小结(2)

1、request 对象 和 response对象

request 对象

- request 对象类型 <http.IncomingMessage>, 继承自stream.Readable
- request 对象常用成员(查看api:https://nodejs.org/dist/latest-v8.x/docs/api/)
  + `request.headers`:  获取请求报文头对象,这个对象包含报文信息
  + `request.rawHeaders` :获取请求报文头对象,对象为数组形式
  + `request.httpVersion` :获取客户端使用的http协议的版本
  + `request.method` :获取客户端请求所使用的方法(get/post..)
  + `request.url`: 获取客户端此次请求的路径(报文中此次请求的路径,不包含报文头、主机名称、端口号、协议)
var http = require('http');

http.createServer(function (req, res) {
  // + `request.headers`
  // + `request.rawHeaders`
  // + `request.httpVersion`
  // + `request.method`
  // + `request.url`


  // 1. 获取所有请求报文头
  // req.headers 返回的是一个对象,这个对象中包含了所有的请求报文头
   console.log(req.headers);

  // req.rawHeaders 返回的是一个数组,数组中保存的都是请求报文头的字符串
   console.log(req.rawHeaders);



  // 2. httpVersion
  // 获取请求客户端所使用的http版本
   console.log(req.httpVersion);


  // 3. method
  // 获取客户端请求使用的方法(POST、GET、....)
  console.log(req.method);


  // 4. url
  // 获取这次请求的路径(获取请求报文中的请求路径,不包含主机名称、端口号、协议)
  console.log(req.url);

  res.end('over');

}).listen(9091, function () {
  console.log('http://localhost:9091');
});

consloe.log(req.headers):

C:\Users\hhh\nodejswork>node reqandres.js
http://localhost/9090
{ host: '127.0.0.1:9090',
  connection: 'keep-alive',
  'upgrade-insecure-requests': '1',
  'user-agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML,
like Gecko) Chrome/65.0.3325.181 Safari/537.36',
  accept: 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,imag
e/apng,*;q=0.8',
  'accept-encoding': 'gzip, deflate, br',
  'accept-language': 'zh-CN,zh;q=0.9' }
{ host: '127.0.0.1:9090',
  connection: 'keep-alive',
  'user-agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML,
like Gecko) Chrome/65.0.3325.181 Safari/537.36',
  accept: 'image/webp,image/apng,image/*,*;q=0.8',
  referer: 'http://127.0.0.1:9090/',
  'accept-encoding': 'gzip, deflate, br',
  'accept-language': 'zh-CN,zh;q=0.9' }

response对象

- response 对象类型 <http.ServerResponse>

- response 对象常用成员
  + `response.writeHead(statusCode[, statusMessage][, headers])`
    1. This method must only be called once on a message and it must be called before response.end() is called.
    - 这个方法在每次请求响应前都必须被调用(只能调用一次)。并且必须在end()方法调用前调用

    2. If you call response.write() or response.end() before calling this, the implicit/mutable headers will be calculated and call this function for you.
    - 如果在调用writeHead()方法之前调用了write() 或 end()方法,系统会自动帮你调用writeHead()方法,并且会生成默认的响应头

    3. When headers have been set with response.setHeader(), they will be merged with any headers passed to response.writeHead(), with the headers passed to response.writeHead() given precedence.

    - 如果通过 res.setHeader() 也设置了响应头,那么系统会将serHeader()设置的响应头和writeHead()设置的响应头合并。 并且writeHead()的设置优先

实例代码:

// 示例代码:
res.writeHead(200, 'OK', {
  'Content-Type': 'text/html; charset=utf-8',
  'Content-Length': Buffer.byteLength(msg)
});
具体:
var http = require('http');

http.createServer(function (req, res) {

  // res.statusCode = 404;
  // res.statusMessage = 'Not Found';
  // // 这句代码要放到前面
  // res.setHeader('Content-Type', 'text/plain; charset=utf-8');


  // 通过 res.writeHead() 来实现
  // res.writeHead(404, 'Not Found', {
  //   'Content-Type': 'text/plain; charset=utf-8'
  // });


  // res.writeHead(200, 'OK', {
  //   'Content-Type': 'text/plain; charset=utf-8'
  // });

  // // 1. res.write() 
  // res.write('hello world! 你好世界!!!');
  // res.write('hello world! 你好世界!!!');
  // res.write('hello world! 你好世界!!!');

  // // 2. 每个请求都必须要调用的一个方法 res.end();
  // // 结束响应(请求)
  // // 告诉服务器该响应的报文头、报文体等等全部已经响应完毕了,可以考虑本次响应结束。
  // // res.end() 要响应数据的话,数据必须是 String 类型或者是 Buffer 类型
  // res.end();



  // 4. 通过 res.setHeader() 来设置响应报文头
  // res.setHeader() 要放在 res.write() 和 res.end() 之前设置
  // 因为即便我们不设置响应报文头,系统也会默认有响应报文头,并且默认发送给浏览器,当已经发送过响应报文头后,就不能再通过 res.setHeader() 来再次设置响应报文头了
  // 否则就会报错
  // res.setHeader('Content-Type', 'text/plain; charset=utf-8');



  // 5. 设置 http 响应状态码
  // res.statusCode 设置 http 响应状态码
  // res.statusMessage 设置 http 响应状态码对应的消息
  // res.statusCode = 404;
  // res.statusMessage = 'Not Found';


  // 6. res.writeHead() 
  // 直接向客户端响应(写入) http 响应报文头
  // 建议在 res.write() 和 res.end() 之前调用

  res.statusCode = 200;
  res.statusMessage = 'OK';
  res.setHeader('Content-Type', 'text/plain; chartset=utf8');

  // res.writeHead(res.statusCode, res.statusMessage, {})

  // res.writeHead(404, 'Not Found', {
  //   'Content-Type': 'text/html; chartset=utf8'
  // });
  res.end('over!');



}).listen(9091, function () {
  console.log('http://localhost:9091');
});


response常用api;

+ `response.write(chunk[, encoding][, callback])`
    - 参数1:要写入的数据,可以是字符串或二进制数据,**必填**。
    - 参数2:编码,默认是utf8,选填。
    - 参数3:回调函数,选填。

  + `response.end([data][, encoding][, callback])`
    * 结束响应。
    * This method signals to the server that all of the response headers and body have been sent; that server should consider this message complete. ***The method, `response.end()`, MUST be called on each response***.
    - res.end()这个方法告诉服务器所有要发送的响应头和响应体都发送完毕了。可以人为这次响应结束了。
    - 同时每次响应都必须调用该方法,用来结束响应

    * 参数1:结束响应前要发送的数据,选填。
    * 参数2:编码,选填。
    * 参数3:回调函数,选填。

  + `response.setHeader(name, value)`
    * 设置响应报文头

  + `response.statusCode`
    * 设置或读取http响应码

  + `response.statusMessage`
    * 设置或读取http响应状态消息

2、NPM - Node Package Manager - Node 包管理器

1、NPM 是什么?

- npm(全称Node Package Manager,即node包管理器)是Node.js默认的、以JavaScript编写的软件包管理系统。
- [npm 官方网站](https://www.npmjs.com/)
- [npm 官方文档](https://docs.npmjs.com/)

一般当我们说npm的时候可能指3件事

1. NPM 网站:https://www.npmjs.com/
2. NPM 包管理库,存储了大量的JavaScript代码库

3. NPM 客户端,我们所使用的npm命令行工具。使用JavaScript开发的基于node.js的命令行工具,本身也是Node的一个包。



2、NPM 官方解释:

- npm is the package manager for JavaScript and the world’s largest software registry.
  + npm 是一个JavaScript包管理器,并且是世界上最大的软件登记处

- discover packages of reusable code — and assemble them in powerful new ways.
  + 发现可重用代码,并集成代码包到项目中的全新的、强大方式

- npm makes it easy for JavaScript developers to share and reuse code, and it makes it easy to update the code that you're sharing.
  + npm 让JavaScript开发者共享和重用代码变的更容易,同时也让我们更容易地更新正在被共享的代码

3、npm与 node.js

- npm是Node.js默认的软件包管理系统。安装完毕node后,会默认安装好npm
- npm本身也是基于Node.js开发的包(软件)

4、如何安装 NPM?

- npm会随着Node.js自动安装,安装完毕node.js后会自动安装npm
- 查看当前npm版本:`npm -v`
- 更新npm: `npm install npm@latest -g`(-g是全局安装的意思,加了-g命令以后,安装完的npm包可以在全局范围下使用,就是不用切换到npm安装包所在的model文件下就可以使用)

5、NPM 使用

1. 在 https://www.npmjs.com/ 网站找到需要的包
2. 在项目的根目录下,执行`npm install 包名称`安装
3. 在node.js代码中通过 `require('包名');` 加载该模块
4. 注意:通过`npm install 包名`安装的包,会自动下载到当前目录下的`node_modules`目录下,如果该目录不存在,则创建,如果已存在则直接下载进去。
5. 在代码中通过 `require('包名');` 加载该模块

----- 上面说的这种方式叫做 本地安装。

6、 NPM 全局安装介绍

1. 什么是 npm 全局安装?
  - `npm install 包名 -g` npm 全局安装指的是把包安装成了一个命令行工具。
```javascript
  // 通过npm全局安装mime
  npm install mime -g

  //安装完毕后可以在命令行中直接使用
  mime a.txt 命令来查看对应的结果
```
2. npm 全局安装实际做了2件事:
  1. 下载包到一个指定的目录`C:\Users\username\AppData\Roaming\npm\node_modules
  2. 创建一段命令行执行的代码。` C:\Users\username\AppData\Roaming\npm\mime -> C:\Users\steve xiaohu zhao\AppData\Roaming\npm\node_modules\mime\cli.js`

7、NPM 安装建议

1. 全局安装只是为了可以当做命令行使用而已


 3、npm常用命令介绍

1. install,安装包。`npm install 包名`
2. uninstall,卸载包。·npm uninstall 包名`
3. version,查看当前npm版本。`npm version` 或 `npm -v`

4. init,创建一个package.json文件。`npm init`



5. 注意:当使用 `npm init -y`  的时候,如果当前文件夹(目录)的名字比较怪(有大写、有中文等等)就会影响npm init -y 的一步生成操作,此时需要 npm init 根据向导来生成

4、"模块"(Modules)和"包"(Packages)的区别

1. A **module** is any file or directory that can be loaded by Node.js' `require()`. 
- 模块可以是任何一个文件或目录(目录下可以有很多个文件),只要能被node.js通过require()即可。
2. A **package** is a file or directory that is described by a `package.json`. This can happen in a bunch of different ways!
- 包是一个文件或目录(目录下可以有多个文件)必须有一个package.json文件来描述,就可以是一个包。

5、node.js 错误调试

1. 当开启服务后,在浏览器中输入地址,如果出现浏览问题,首先要先看 服务器控制台是否报错。如果报错,直接根据服务器报错进行排错。

2. 打开浏览器开发者工具中的 “网络” 部分,查看请求是否成功发出去了
- 看一下请求报文是不是和我们想的一样
- 响应状态码



6、在 html 网页中路径的含义 

在 html 网页中相对路径 './' 和 绝对路径 '/'的含义 
1. "相对路径" 到底 "相对" 的是什么?
  - 相对当前请求的路径
  - 相对于吐出当前网页的路径

## 网页中的这个路径主要是告诉浏览器向哪个地址发起请求用的

1. './' 表示本次请求从相对于当前页面的请求路径(即服务器返回当前页面时的请求路径)开始
2. '/' 表示请求从根目录开始

7、package.json 文件(重要

 1、package.json 文件的作用?


1. package.json 文件是一个包说明文件(项目描述文件),用来管理组织一个包(一个项目)
2. package.json 文件是一个 json 格式的文件
3. 位于当前项目的根目录下

2、元数据

比如说数据库的数据库信息等等,描述的是原始的数据信息

3、package.json 文件中常见的项有哪些?

+ name
  - 包的名字
+ version
  - 包的版本
+ description
  - 包描述
+ author
  - 包的作者
+ main
  - 包的入口js文件,从main字段这里指定的那个js文件开始执行
+ dependencies
  - 当前包依赖的其他包

4、如何创建一个 package.json 文件

1. 通过 `npm init` 命令 或者 `npm init -y` 或 `npm init -yes`  命令
2. 手动创建一个

### 注意
1. 通过 `npm init -y` 或 `npm init -yes` 创建 package.json 文件时,执行命令所在的目录接名称中不能包含大写字母
2. package.json 文件中,项目名称本身不能包含大写字母
3. npm 更新新版本后,项目所在的文件夹如果包含中文等特殊字符,创建的时候不会提示一步一步的输入,直接报错。
## 官方介绍
1. [package.json](https://docs.npmjs.com/files/package.json)
2. [Using a package.json](https://docs.npmjs.com/getting-started/using-a-package.json)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值