8-NodeJS基础

本文详细介绍了Node.js的基础知识,包括全局对象global、模块化开发、系统模块如fs和path,以及第三方模块的使用。重点讲解了Node.js中的http模块创建Web服务器,包括请求参数、路由、静态资源和异步处理。还涉及数据库MongoDB的使用,模板引擎如art-template,以及Express框架的应用。此外,文章提到了开发环境和生产环境的差异,以及数据库账号管理和环境变量的设置。
摘要由CSDN通过智能技术生成

Node

  • Node是一个基于Chrome V8引擎的 javaScript代码运行环境
    • 什么软件可以运行javaScript ,它就是javaScript的运行环境
  • Node.js是运行在代码环境之上的语言
    • 由ECMAScript 和模块的API组成
Node.js全局对象global
  • 在浏览器中全局对象是window,在Node中全局对象是global
  • 全局对象global 中 以下方法可以在任何地方使用, global可以省略
  • console.log()
  • setTimeout()
  • clearTimeout()
  • setInterval()
  • clearInterval()
javaScript的弊端
  • 浏览器端javaScript在使用时存在两大问题,命名冲突(命名污染)和文件依赖
  • 模块化开发需要依赖第三方库文件,具有代表性有require.js 和sea.js
环境变量Path
  • 将一些要执行的软件的根目录存储到系统当中,在命令行中当前目录没有找到要执行的文件名时,系统会自动去这些目录下查找有没有同名的文件名,有就会执行.

模块化开发(导入导出)

  • 一个javaScript文件就是一个模块.
  • 模块化开发的好处就是当一个模块出问题时,我们只需要将这个模块取出 进行修复就好,其他模块还是正常在运行的
  • 模块内部定义的变量和函数默认情况下在外部无法得到
  • 模块内部可以使用exports对象进行成员导出,使用require方法导入其他模块
要导出暴露(共享)出去的变量或函数的 a.js 文件:
const add = (n1,n2) => n1+n2;    //定义一个加法函数
exports.add = add;				//第一个add为exports对象的属性,第二个add为函数

要导入外部变量或函数的 b.js 文件:
let a = require('./a.js');      //用一个变量接收返回值 
a.add(10,20);				    //输出a可以查看共享的变量或函数  函数可以代入参数调用来使用
  • exports是module.exports的别名(地址引用关系) ,所以导出导入变量用module.exports对象也是可以的
  • 当exports和module.exports指向同一个对象时,可以同时添加属性和方法,当给module.exports对象重新赋值(覆盖原有的属性方法)时,导出对象最终以module.exports准

系统模块 fs 文件操作

  • 系统模块: Node环境提供的API ,这些API都是以模块的方式进行开发的,所以这些API又叫系统模块

  • 文件模块fs 可以 读取文件, 写入文件, 创建文件夹

  • 要使用fs的方法 必须先引入fs模块

  1. 读取文件
    • fs.readFile(‘文件路径/文件名称’,[‘文件编码’],callback) callback 就是回调函数
    • 读取文件是硬盘的操作,需要时间(耗时操作), 所以用一个回调函数来返回读取的结果
const fs = require('fs')    //引入fs模块
//要读取其他模块的 js文件b.js内
fs.readFile('./a.js','UTF8',(err,doc) => {
     
		//读取a.js文件 如果读取成功err=null 失败 err就是一个对象,里面存储错误信息
	if (err == null) {
   		//如果读取成功
		console.log(doc)	//输出doc(文件读取的结果,就是文件的内容) 
	}
})

2.写入文件

  • fs.writeFile(‘文件路径/文件名称’ , ‘要写入的内容’ , callback)
  • 如果没有要写入的这个文件,系统会自动帮我们创建
const fs = require('fs')    //引入fs模块
fs.writeFile('./dome.txt','要写入的内容可以是变量',err => {
   
	if (err != null) {
   			//当写入失败的时候 
		console.log(err);		//输出打印错误信息 并且直接退出函数
		return;
	}
	console.log('文件内容写入成功')  //写入成功时,控制台打印成功
})
系统模块path 路径操作
  1. 路径拼接 path.join(‘路径’,‘路径’…)
  • 由于不同操作系统的分隔符不同 \ 或 / 我们需要用路径拼接方法让系统自动帮我们拼接相应的分隔符
const path = require('path')   //引入path模块
//因为路径拼接不是耗时操作 可以直接用变量保存返回值
let finalPath = path.join('视频','动漫','喜洋洋与灰太狼')   
console.log(finalPath)  // window以\分割  所以会分割成 视频\动漫\喜洋洋与灰太狼
相对路径and绝对路径
  • 相对路径有时候相对的是命令行工具的当前工作目录,容易路径错误,所以大多数情况下使用绝对路径
  • 在读取文件或者设置文件路径都会选择绝对路径
  • 可以使用**__dirname**获得当前文件所在目录的绝对路径
const fs = require('fs')    //引入fs模块
const path = require('path')   //绝对路径是路径操作要引入 路径模块
//读取文件API      自动获取当前文件的绝对路径          //报错回调函数 
fs.readFile(path.join(__dirname,'文件名'),'uft8',(err,doc) => {
   
	console.log(err)
	console.log(doc)
})

第三方模块

  • 别人编译好,具有特定功能 可以直接使用的模块叫第三方模块.
  • 由于第三方模块通常由多个文件组成放在一个文件夹中,又名为 包
  • 第三方模块两种存在形式
    • 以js文件的形式存在,提供实现具体功能的API接口 类似jQuery
    • 以命令行工具形式存在,辅助项目开发
  • 第三方模块下载平台: npmjs.com 第三方模块的存储和分发仓库
  • 下载: npm install 模块名称 (默认下载到命令行工作目录下)
    • 本地安装就是模块安装到当前项目当中 (库文件)
    • 全局安装就是安装到公共目录,所有的项目都可以使用 (命令行工具)
  • 卸载 npm uninstall 模块名称 (直接删除文件夹也可以)
第三方模块nodemon 保存自动运行
  • 命令行工具中 : npm install nodemon -g 下载(-g全局匹配)
  • 当这个文件被保存时,命令行工具会自动再运行这个被保存的文件, 大大提高了工作效率
  • ctrl+c在命令行工具中是终止操作的意思
第三方模块 nrm 切换国内下载地址
  • 下载地址切换工具,因为npm默认的下载地址在国外,国内下载速度慢. 所以要切换到国内同步了国外npm的服务器网址.这样可以提高下载速度
  • 命令行工具使用: npm install nrm -g 下载(-g全局匹配)
  • nrm ls 查询可用下载地址列表 (前面有*号的是当前默认的下载地址)
  • nrm use 要切换的下载地址
第三方模块 gulp
  • 构建项目,HTML CSS JS文件压缩合并
  • 语法转换(es6,less)
  • 公共文件抽离
  • 修改文件浏览器自动刷新
  • 1.命令行工具使用 npm install gulp 下载(要使用的库文件下载)
    • npm install gulp -cli 安装gulp命令工具
  • 2.在项目根目录创建gulpfile.js文件 (名字不能更改)
  • 3.新建一个src目录文件 将原代码全部放入其中, 新建一个dist文件 用于放置构建后的文件
  • 4.在gulpfile.js文件中编写任务
  • 5.在命令行工具中执行gulp任务
  • 一个html要运行 需要拷贝html css js 还有图片音频等文件
gulp中提供的方法:
  • gulp.src() 获取任务要处理的文件
    • .pipe 匹配当前任务获取的文件 , 进行何种操作 (指派任务)
  • gulp.dest() 输出文件
  • gulp.task() 建立gulp任务 (第一个参数是任务名,第二个参数是回调函数)
  • gulp.watch 监控文件的变化
const gulp = require('gulp')   //引入gulp模块
gulp.task('要建立的任务名',() => {
   			//task 建立任务
	gulp.src('./src/css/base.css')		//要处理的文件
	.pipe(gulp.dast('dist/css'))		//要输出的文件(相当于拷贝到另一个文件夹中)
})
  • 要使用gulp的方法 需要下载一个东西
    • 命令行工具 : npm install gulp-cli -g
    • 使用时在当前目录名 命令行工具输入 : gulp 要输出的任务名
gulp插件使用
  1. 在命令行工具下载插件
  2. 查看相应文档
  3. 调用插件
    • gulp-htmlmin html文件压缩
    • gulp-csso 压缩css
    • gulp-babel javaScript语法转换(es6转es5)
      • 会根据当前运行环境,转换支持当前环境的代码
    • gulp-less less语法转换css 等等
    • gulp-uglify 压缩混淆javaScript (压缩js文件)
      • 在语法转换完毕后使用
1. require()引用插件的模块
2.使用gulp.task()创建任务   
task的回调函数中进行:
3.gulp.src()获取要处理的文件
  //*代表所有的, less文件或css文件 可以以数组的方式传递多个
  gulp.src(['./src/css/*.less','./src/css/*.css'])  
4.	pipe(调用要对要处理文件使用的下载好的插件的方法)
	pipe(less())   prpe(csso())   //将less转换为css   将css进行压缩
5.	pipe(gulp.dest(输出处理后的文件到相应文件夹)    //复制处理后的文件至构建后的文件夹

任务构建(命令行工具执行多个任务)
task第二个参数 如果不写函数 写中括号,数组元素写任务名,当这个任务被执行时,会依次执行数组里的任务
gulp.task('default',['任务名1','任务名2','任务名3','任务名4'])
package.json项目描述文件

项目描述文件,记录当前项目信息,例如项目名称,版本号,作者,github地址,当前项目依赖了哪些第三方模块, 可以让他人快速了解项目信息,下载依赖文件. 使用npm init -y 生成 路径不能有中文

  • 下载第三方模块时会自动产生package-lock.json,它的作用是, 锁定包的版本号 加快下载速度

  • package.json中scripts选项中的作用

    • 存储命令的别名 , 当我们要频繁使用的命令比较长的时候 可以给它起个别名
    • 通过 npm run ‘别名’ 来运行
  1. 项目依赖
  • 在项目的开发阶段和线上运营阶段,都需要依赖的第三方包,称为项目依赖。

  • 使用npm install 包名命令下载的文件会默认被添加到package.json文件的dependencies字段中。

  • 在dependencies字段中的第三方模块就是项目依赖

  1. 开发依赖
  • 在项目的开发阶段需要依赖,线上运营阶段不需要依赖的第三方包,称为开发依赖。

  • 使用npm install 包名 --save-dev命令下载的文件会默认被添加到package.json文件的devDependencies字段中。

  • 在devDependencies字段中的第三方模块就是开发依赖

  1. 为什么记录依赖项
  2. Node.js中下载的第三方包文件拥有非常多的细碎文件,将项目通过移动硬盘传递给别人时传输速度非常慢.

  3. 使用git工具管理项目时,不希望git管理node_modules文件夹,也不会将其上传到github中.

  • 当其他人获取到项目时,可以在项目根目录下执行npm install 命令,npm工具会自动去package.json文件中查找项目依赖文件并下载.
  1. 当项目上线以后,可以直接运行npm install --production下载项目依赖。如果不加–production,会下载全部依赖

模块查找规则

  1. require(’./find’); 当模块拥有路径 没有后缀时
  • 先查找有没有同名js文件 ,再查找同名文件夹
  • 有同名文件夹,就会去当前文件夹中的package.js文件中main选项中的入口文件
  • 如果main选中的没有不存在或者没有指定入口文件, 找同名文件夹中的index.js
  • 如果文件夹中没有index.js文件 就会报错
  1. require(‘find’); 当模块没有路径也没有后缀时,会先被当作一个系统模块
  • 如果参数不是一个系统模块,会去node_modules文件夹中看看是否有同名的js文件
  • 接下来的查询步骤和当模块拥有路径没有后缀时一样

服务器端基础

网站的组成 :
  • 客户端(html css js) : 在浏览器运行的部分, 能让用户看到并与之交互的界面程序.
  • 服务器端(node.js) : 在服务器中运行的部分 , 负责 存储数据和处理应用逻辑.
  • 客户端 通过请求 服务器 , 服务器端接收请求并逻辑处理 响应回 客户端
  • Node网站服务器:它能够接收客户端的请求,将接收的请求逻辑处理后响应
IP地址 域名 端口
  • IP地址 : 网络环境下的唯一标识,相当于计算机的编号吧,用于访问服务器,但是由于ip地址都是数字,不便记忆,所以就有了域名.
  • 域名 : 就是上网所用的网址,计算机会在DNS服务器自动将域名转换为IP地址 然后使用IP地址请求服务器
  • 端口 : 用于区分客户端的不同的软件请求是哪一种应用程序, 是在一段范围内的数字(0~65535),每一个应用程序都有一个不同的端口号,如果一个端口号被一个软件占用了, 另一个软件再去绑定就会报错.
    • netstat -anolfindstr 3000 查看3000端口是哪个进程的PID在占用
    • 3000网站服务 110 邮件服务 27017 数据库服务 21文件上传服务
URL的组成(统一资源定位符)
  • URL传输协议组成 : 协议//域名:端口/ 路径?参数
  • http: // www.baidu.com / news / 20190110/123456789.html
  • 网站一般使用的都是http协议.

uri : 统一资源标识符

  • 作用 : 本地资源定位

创建Web服务器 (http模块)

//引用系统模块htttp
const http = require('http')
//http的一个方法获取http网站服务器对象
const app =http.createServer();
//为网站服务器添加事件(request请求事件)  req请求对象  res响应对象
app.on('request',(req,res) => {
   
//res响应对象的end方法 响应请求对象 参数写响应的内容
	res.end()
})
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值