NodeJs(二)

一、包管理工具

1、npm
npm(node package manager)是nodejs的包管理器,用于node插件管理(包括安装、卸载、管理依赖等)。
在向node添加任何包之前,需要创建一个文件: package.json。它包含了应用或程序最基本的信息,比如名字、版本、作者、反馈的地址、依赖关系等等。
所有node都应有这个json文件。使用npm init来初始化。

npm init

2、为什么我们需要一个包管理工具呢?

因为我们在Node.js上开发时,会用到很多别人写的JavaScript代码。如果我们要使用别人写的某个包,每次都根据名称搜索一下官方网站,下载代码,解压,再使用,非常繁琐。于是一个集中管理的工具应运而生:大家都把自己开发的模块打包后放到npm官网上,如果要使用,直接通过npm安装就可以直接用,不用管代码存在哪,应该从哪下载。
更重要的是,如果我们要使用模块A,而模块A又依赖于模块B,模块B又依赖于模块X和模块Y,npm可以根据依赖关系,把所有依赖的包都下载下来并管理起来。否则,靠我们自己手动管理,肯定既麻烦又容易出错。

3、npm包安装方式

  • 本地安装:
    本地安装的包在当前目录下的node_modules里面,本地安装的包一般用于实际的开发工作
  • 全局安装:
    全局安装的包位于Node.js环境的node_modules目录下,全局安装的包一般用于命令行工具。

4、npm常用的命令

  • 升级npm(自己升级自己)
    npm install --global npm

  • 安装包(如果没有指定版本号,那么安装最新版本)
    npm install -g 包名称 (全局安装)
    npm install 包名称 (本地安装)

  • 安装包的时候可以指定版本
    npm install -g 包名称@版本号

  • 卸载包
    npm uninstall -g 包名

  • 更新包(更新到最新版本)
    npm update -g 包名

  • 查看命令的使用帮助
    npm 命令 --help

5、开发环境和生产环境

开发环境(平时开发使用的环境)
生产环境(项目部署上线之后的服务器环境)
--save 向生产环境添加依赖 dependencies
--save-dev 向开发环境添加依赖 DevDependencies

安装依赖:
命令行输入 npm install --production只会安装package.json里面dependencies属性所对应的包,不会安装 DevDependencies 所对应的包。

命令行输入 npm install 则package.json里面dependencies和 DevDependencies 属性所对应的包都能安装。
会在package.json的json对象中加入dependencies或DevDependencies 属性,属性值是一个对象{包名:版本号}

6、cnpm

因为npm安装插件是从国外服务器下载,受网络影响大,可能出现异常。cnpm是国内服务器,稳定,速度快。

cnpm的安装:
npm install -g cnpm --registry=https://registry.npm.taobao.org
测试:
cnpm -v
如果有出现版本号证明安装成功
cnpm跟npm用法完全一致,只是在执行命令时将npm改为cnpm

如果你不想安装cnpm,就可以在安装包的时候使用淘宝镜像来安装,例如:

npm install jquery --registry=https://registry.npm.taobao.org
但是每次手动这样加参数就很麻烦,所以我们把这个选项加入到配置文件中:
npm config set registry https://registry.npm.taobao.org
只要经过了上面命令到配置,则以后所有的npm install 都会默认通过淘宝都服务器来下载。

如何验证配置是否成功:
查看npm 配置信息 :npm config list        里面就会显示register  

二、get和post请求

说起get/post请求,可能都不是很陌生,因为表单提交到服务器一般都使用get/post请求。
1、获取get请求内容

由于get请求直接被嵌入在路径中,url是完整的请求路径,包括?后面的部分。
nodejs中的url模块中的parse函数提供了这个功能。

获取url里面参数又两种形式:

  • 使用url,第二个参数必须加true
var url = require('url');
var reqUrl = req.url;
var queryUrl = url.parse(reqUrl,true).query;
console.log(queryUrl);

在这里插入图片描述

  • 使用url+queryString
var url = require('url');
var queryString = require('querystring');
var reqUrl = req.url;
var queryUrl = url.parse(reqUrl).query;
console.log(queryString.parse(queryUrl));

get请求在form中的应用

 <form method="get" action="http://localhost:50">
      <input type="text" name="userName">
      <input type="text" name="pwd">
      <input type="submit" value="提交">
 </form>
var url = require('url');
var http = require('http');
var server = http.createServer();
server.on('request',function(req,res){
    res.setHeader('Content-Type','text/plain;charset=utf-8')
    var reqUrl = req.url;
    var parseUrl = url.parse(reqUrl,true).query;
    var user = parseUrl.userName;
    var pwd = parseUrl.pwd;
    console.log(user,pwd);
    res.end("用户名是:"+ user+ '\n' + "密码是:"+ pwd);
})
server.listen(50,function(){
    console.log('run~');
})

在这里插入图片描述

2、获取post请求内容

 post请求的内容全部的都在请求体中,http.ServerRequest并没有一个属性内容为请求体,原因是等待请求传输可能是一件耗时的工作。
post没有路径传值,post是事件接受

req.on('data') : 每次发送数据
req.on('end') : 数据发送完成

post请求在form中的应用

<form method="post" action="http://localhost:50">
       <input type="text" name="userName">
       <input type="password" name="pwd">
       <input type="submit" value="提交">
</form>
var querystring = require('querystring');
var http = require('http');
var server = http.createServer();
server.on('request',function(req,res){
   var surl = '';
   req.on('data',(chunk)=>{
       surl += chunk;
   })
   req.on('end',()=>{
       console.log(querystring.parse(surl));
   })
})
server.listen(50,function(){
    console.log('run~');
})

在这里插入图片描述

3、表单提交中get和post方式的区别

  • get是从服务器上获取数据,post是向服务器传送数据。
  • get是把参数数据队列加到提交表单的action属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到。post是通过HTTPpost机制,将表单内各个字段与其内容放置在HTML header内一起传送到action属性所指的URL地址。用户看不到这个过程。
  • get传送的数据量较小,不能大于2KB。post传送的数据量较大,一般被默认为不受限制。
  • get安全性非常低,post安全性较高。

三、服务端渲染和客户端渲染的区别

1、客户端的渲染


在这里插入图片描述
2、服务器端端渲染


在这里插入图片描述
3、区别

  • 客户端渲染不利于 SEO 搜索引擎优化

  • 服务端渲染是可以被爬虫抓取到的,客户端异步渲染是很难被爬虫抓取到的

    所以你会发现真正的网站既不是纯异步也不是纯服务端渲染出来的,而是两者结合来做的
    例如京东,商品列表是采用的服务端渲染,目的是为了 SEO 搜索引擎优化,而它的商品评论列表为了用户体验,不需要 SEO 优化,所以采用客户端异步渲染

  • 在一个页面中,如果右键查看源代码,可以看到源代码的时候就说明这个网站是服务端渲染过来的。

  • 客户端用户体验会较好。服务端渲染说白了就是在服务端渲染模版引擎。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值