NodeJs随笔

Node

  • Node.js:不是框架,不是语言,是JS运行时环境。
  • Node.js特性:1.事件驱动 2.非阻塞IO模型(异步) 3.轻量和高效
  • Node.js没有 BOM 和 DOM
  • Node 不适合从来没有接触过服务端的人学习,如果想要真正学好服务端,还是老牌 Java,PHP
    Node 不是特别适合入门服务端,但是不代表 Node 不强大
    Node 很厉害,具有经验的人可以玩的非常牛,不适合的原因就在于比较偏底层,而且太灵活;
    Java,PHP 好入门的原因在于:这些平台屏蔽了一些底层

安装

Node.js 官方网站下载:https://nodejs.org/en/
在这里插入图片描述
在这里插入图片描述
一直下一步下一步,别装C盘。
确认Node环境是否安装成功: 在这里插入图片描述启动命令窗口 window+R 然后cmd
在这里插入图片描述输入node --version(简写 -v),会显示当前版本号,则安装Node成功。

  • 浏览器中的JavaScript是没有文件操作能力的;但是Node中的JavaScript具有文件操作能力
  • 编码工具安装Terminal插件,鼠标右击显示Open in…直接打开当前文件目录

什么是模块化?

  1. CommonJS模块规范
    ····在Node中的JavaScript还有一个很重要的概念:模块系统
    ··········模块作用域
    ··········使用 require 防范加载模块
    ··········使用 exports 接口对象来导出模块中的成员
  2. 有文件作用域
    ·····文件之间通信规则
    ··········通过 exports 导出
    ··········通过 require 加载
    require 是一个方法,它的作用就是用来加载模块的。
    require方法有两个作用:
    ·······1.加载文件模块并执行里边代码
    ·······2.拿到被加载文件模块导出的接口对象
    加载 require语法:
    ·······var 自定义变量名 = require(‘模块’)
    两个作用:
    ······执行被加载模块中的代码
    ······得到被加载模块中的 exports 导出接口对象

** require 方法加载规则
模块查找机制
1.优先从缓存加载
2.核心模块
3.路径形式的文件模块
4.第三方模块
node_modules
node_modules/子文件
node_modules/子文件/package.json
index.js 备选项
进入上一级目录找 node_modules
按照这个规则依次往上找,知道磁盘根目录还找不到,最后报错:Can not find module xxx**

导出 exports
Node 中是模块作用域,默认文件中所有的成员只在当前文件模块有效,在每一个问及那个模块中提供了一个对象:exports,exports 默认是一个空对象,我们要做的就是把所有需要的被外部访问的变量或者函数什么的等等挂载到 exports 上边。
······导出多个成员(必须在对象中)
exports.a = 123;
exports.b = 456;

最后拿到的就是一个对象:{a:123;b:456}
······导出单个成员(拿到的就是:函数,字符串…单个对象)
module.exports = ‘hello’
【 注意】:这种方法如果导出多个,后面的会覆盖前面的。解决办法:导出一个对象{a:hello;b:function(x,y){return x+y}

exports 和 module.exports 的区别?

在Node中,每个模块都有一个自己的module对象,module对象中有一个exports对象,我们需要把导出的成员都挂载到module.exports接口对象中,但是写法啰嗦,为了方便书写,在 module模块中又提供了一个成员叫:exports,也是一个对象,默认为空,exports === module.exports,结果为true。当需要导出多个成员时,用exports 和 module.exports 都可以;但是注意如果只导出一个成员的时候,则必须使用 module.exports
因为每个模块默认在代码的最后有一句:return module.exports ,exports只是module.exports的一个引用,所以即使为exports从新赋值也没有用;但是这里有一种情况例外,就是用 exports = module.exports 来重新建立引用关系之后,就可以使用 exports 了。谁来 require 我,谁就得到 module.exports

Node中的模块系统

使用Node编写程序主要就是在使用:
······EcmaScript语言
············和浏览器不一样,在Node中没有 Bom 和 Dom
······核心模块
···············文件操作的fs
···············http服务的 http
···············url路径操作模块
···············path路径处理模块
···············os操作系统信息
·····第三方模块
············art-template
············必须通过 npm 来下载才可以使用
·····自己编写的模块

核心模块

  1. Node 为 JavaScript 提供了很多服务器级别的API,这些API绝大多数都被包装到了具名的核心模块中,例如:文件操作的 fs 核心模块,http 服务构建的 http模块,path 路径操作模块,os 操作系统信息模块----------使用模块之前必须先引入。核心模块的本质也是文件,核心模块文件已经被编译到了二进制文件中了,我们只需要按照名字来加载就可以了。
  2. 在Node中,模块有三种:
    ············具名的核心模块,例如:fs,http
    ············用户自己编写的文件模块
    ············相对路径必须加 ./ 可以省略后缀名
    在Node中,没有全局作用域,只有模块作用域,外部访问不到内部,内部访问不到外部,默认是封闭的。既然是模块作用域,那如何让模块与模块之间进行通信,有时候我们加载文件模块的目的不仅是为了执行里面的代码,更重要的使用里边的变量或者函数等等

服务端渲染

  • 说白了就是在服务端使用模板引擎
  • 模板引擎最早诞生于服务端,后来才发展到了前端
    服务端渲染和客户端渲染的区别?
  • 客户端渲染比服务端渲染页面显示快
  • 客户端渲染不利于 SEO 搜索引擎优化
  • 服务端渲染是可以被爬虫抓取到的,客户端异步渲染是很难被爬虫抓取到的
  • 所以真正的网站既不是纯异步,也不是纯服务端渲染出来的,而是两者结合来做的
    (例如:某东的商品列表就采用的是服务端渲染,目的是为了支持 SEO 搜索引擎优化;而他的商品评论列表为了用户体验,并且也不需要 SEO 优化,所以采用的是客户端渲染)

NPM(node.js写的)

npm(全称:node package manager包管理器),npm是世界上最大的开源库生态系统
git(C语言) hexo(node.js)
推荐书《深入浅出Node.js》
在这里插入图片描述

解决 npm 被墙问题

http://npm.taobao.org/淘宝的开发团队把 npm 在国内做了一个备份
安装:淘宝镜像 cnpm: npm install --global cnpm(–global表示安装到全局,而非当前目录,不能省略)

项目目录

1.为了目录结构清晰,我们约定把所有的 HTML 文件都放到 views(视图)目录下;为了方便管理静态资源,img,css,js等,我们把所有的静态资源都存放到 public 目录下。
【注意】:在服务端中,文件中的路径就不要去写相对路径了,因为这个时候所有的资源都是通过 url 标识来获取的,服务器开放了 /public/ 目录,所以这里的请求路径都写成:/public/xxx ;/ 在这里就是url根路径的意思,浏览器在真正发送请求的时候会把 http://127.0.0.1:3000 拼上不要在想文件路径了,把所有的路径都想象成 url 地址
2… url 的 parse 方法可以把字符串解析成一个对象

Package.json文件

建议每一个项目都要有一个 package.json 文件(包描述文件)
这个文件可以通过 npm init 自动创建出来,
package.json里边有一个 dependencies 选项,这个选项在安装第三方的时候会存储我们的第三方包的依赖信息,很有用。
安装第三方包的时候 npm i --save 包名 (只有加 --save 时,这个选项才会保存,不加不保存);
如果不小心删除了 node_modules 也不用担心,只需要执行 npm install 命令就会自动把 package.json 中的 dependencies 中的所有依赖都加载回来。

解决浏览器不识别UTF8编码的问题

在服务器默认发送的数据,其实是 UTF8 编码的内容
但是浏览器不知道你是 UTF8 编码的内容
浏览器在不知道服务器响应内容的编码情况下会按照当前操作系统的默认编码去解析
中文操作系统默认是 gbk
解决方法就是正确告诉浏览器我给你发送的内容是什么编码的
res.setHeader(‘Content-Type’,‘text/plain;charset=utf-8’);
res.end(‘hello 世界你好,中文’); //hello 涓栫晫浣犲ソ锛屼腑鏂�
如果发送的是 HTML 格式的,也要告诉浏览器我给你发送的是 text/html 格式的内容

res.setHeader('Content-Type','text/html;charset=utf-8'); 
res.end('<p>hello node <a href=""> 点我 </a> </p>');

常见命令行语言

1.启动命令窗口 window+R 然后cmd
2.进入盘 d:回车 哪个盘+:+回车
3.进入文件 cd 文件名
4.返回上一级文件 cd …/
5.清空命令行 cls
6.查看文件目录 dir
7.自动补全功能 tab键
8.历史记录 键盘的上下键
9.创建文件 mkdir 文件名
10. 删除文件 rd 文件名
11.运行node文件 .js文件 node 文件名(写一点tab键补全)
12.关闭node运行的环境 Ctrl+c [注]必须在当前文件目录下运行node .js文件
13.进入盘 cd 文件名 一直 cd文件名
14.找到文件目录 按shift+右键----->在此处打开命令窗口 直接运行


npm -v #显示版本,检查npm 是否正确安装。

npm install express #安装express模块

npm install -g express #全局安装express模块

npm list #列出已安装模块

npm show express #显示模块详情

npm update #升级当前目录下的项目的所有模块

npm update express #升级当前目录下的项目的指定模块

npm update -g express #升级全局安装的express模块

npm uninstall express #删除指定的模块

  1. 查看node版本
    node --version
  2. 查看npm 版本,检查npm 是否正确安装。
    npm -v
  3. 安装cnpm (国内淘宝镜像源),主要用于某些包或命令程序下载不下来的情况
    npm install cnpm -g --registry=https://registry.npm.taobao.org
  4. 安装express模块
    npm install express
  5. 全局安装express模块
    npm install -g express
  6. 列出已安装模块
    npm list
  7. 显示模块详情
    npm show express
  8. 升级当前目录下的项目的所有模块
    npm update
  9. 升级当前目录下的项目的指定模块
    npm update express
  10. 升级全局安装的express模块
    npm update -g express
  11. 删除指定的模块
    npm uninstall express
  12. 更新node 版本
    首先需要确保是否安装 n 模块,这个是node升级需要
    没有安装执行:npm i n -g -f
    检测使用: n --version
    更新node命令:n stable
  13. node 引入模块使用 require
    var http = require(“http”)

拓展

所有的联网的程序都需要进行网络通信
计算机中只有一个物理网卡,而且同一个局域网中,网卡的地址必须是唯一的。
网卡是通过唯一的IP地址来进行定位的
DNS 把域名解析成 IP 地址
服务器就是一台24小时不关机的电脑
···········IP 地址用来定位计算机
···········端口号用来定位具体的应用程序(所有需要联网通信的软件都必须具有端口号)
···········端口号的范围从0-65536之间
···········在计算机中有一些默认端口号,最好不要去使用,例如: HTTP 服务的 80端口,我们在开发过程中使用一些简单好记的就可以,例如:3000,5000,8000,8080等没什么含义的
··········可以同时开启多个服务,但一定要确保不同服务占用的端口号不一致才可以,说白了在一台计算机中,同一个端口号同一时间只能被一个程序占用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值