Node JS基础

时间:2021-08-08
本文章向大家介绍Node JS基础,主要包括Node JS基础使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

Node

Node是基于chrome V8的js运行环境

去node.js官网下载安装包安装即可

在命令行工具输入node -v后回车可查看node环境是否安装成功

js是基于ECMAScript语法的,操作BOM和DOM

node.js也是基于ECMAScript语法,还有额外的Node API

如果需要不依赖html运行js,只需要在js所在目录按住shift,右键打开命令栏运行

node.js内部的变量和方法默认不能被外部访问,如果a.js内部的方法要被外部(b.js)访问使用:

1.在a内使用exports.变量=变量

2.在a内使用module.exports.变量=变量

如果同时使用export和module.expore变量,以module.expore为准

3.在b内使用require(‘文件名’)访问

Node系统模块

fs方法

f:即file文件

s:即system系统

./代表本级目录 ../代表下级目录

读取文件

fs.readFile(“文件路径”,“文件编码”,回调函数)

文件引用 const fs = require(”fs“);

回调函数内包含(err,doc)

err代表是否出错,返回null代表没有出错,doc为文件内容

写入文件

fs.weiteFile(“要写入的文件名”,“要写入的内容”,回调函数)

如果没有要写入的文件系统会自动创建

路径拼接

path方法

window的路径基本使用/\

但服务器linux只有/

用户上传头像等是保存到服务器中,所以需要路径拼接

导入path模块

const path= require(“path”)

let fin = path.join(“a”,“b”,“c.css”)

结果为a\b\c.css

在大多数情况下都会使用绝对路径

使用--dirname可以获取绝对路径

eg:path.join(__dirname,"路径")

第三方模块

是多个文件组成的包 npmjs.com有文档

部分第三方模块可以链式编写,即res.status().send()

获取第三方模块,使用npm(node packge manager)命令

下载:npm install 模块名称(下载到命令行所在目录)

卸载:npm uninstall 模块名称

nodemon是一个第三方辅助执行文件(文件被修改会自动执行)

1.npm install nodemon -g(-g代表全局安装)

2.使用nodemon代替node执行

3.ctrl+c结束命令

nrm:npm下载地址切换工具

1.npm install -g

2.nrm ls可查看下载地址列表

3.nrm use +地址

gulp第三方模块前端构建工具

项目上线,html、js、css合并

语法转换

公共文件抽离

1.npm install gulp

2.在项目根目录建立gulpfile.js文件

3.创建两个文件夹,src文件夹放置源代码,dist文件夹放置压缩后的文件

4.在gulpfile.js内编写任务

5.执行gulpfile.js

gulp中的方法(用*可以获取所有同类型文件)

gulp.src();获取要处理的文件

gulp.dest()输出文件

gulp.task()建立gulp任务

gulp.watch()监控文件变化

eg:const gulp = require("gulp");

gulp.task(first,()=>{

gulp.src("./src/css").pipe(gulp.dest('dist/css'))

]})

gulp插件

gulp-htmlmin压缩html文件中的代码

gulp-csso压缩css

gulp-babel js语法转化

gulp-less less语法转化

gulp-uglify 压缩混淆js

gulp-file-include 公共文件包含

一般网站头部和尾部会用到,使用@@include(“公共路径”)可以引用

browsersync 浏览器实时同步

gulp可以将所有任务封装起来依次执行eg:gulp.task('default',['htmlmin','cssmin','copy'])

package.json

package.json会记录项目相关信息,包括第三方模块(在dependencies字段中),快速生成package.json文件可以使用 npm install -y

在传输时可避免传递node-modules模块(本模块过大),使用npm install即可下载所有第三模块

开发依赖

项目在开发阶段的依赖称为开发依赖,但有些项目依赖在上线之后不需要了,所以在安装包时,在开发阶段需要的依赖以--save-dev命令结尾,此文件会存储在devDependencies中,如果在服务器线上环境使用--production

服务器端

url:传输协议://IP或域名:端口(默认为80)/资源所在位置

http超文本传输协议

创建web服务器

请求报文

post 发送数据(安全,放在请求体中)

get 请求数据(不安全,通过url传递)

req.headers获取请求报文信息

req.url获取请求地址

req.method获取请求方法

res.writeHead(状态码,{‘content-type’:文件类型})可以设置http状态码和默认编码方式

获取文件type可以使用mine插件

url.parse(req.url,true)会解析url的参数(限于get请求)

url.parse().pathname可以返回无参数的url

querystring可以处理post请求的字符串

路由

请求什么响应什么,网页的访问路径

同步api从上到下执行,异步api会放在栈堆中,等到触发才执行

异步api需要通过回调函数来调用,没有返回值,所以需要封装callback函数

读取文件是异步API,第二部是回调函数

回调异步解决的方法:将回调函数写入回调函数中,但会导致过多嵌套,还可以使用promise构造函数

eg:let promise = new Promise((resolve,reject)=>{

fs.readFile("./1.txt",''utf8',(err ,result) = >{

​ if(err!=null){

​ reject(err)

}else{resolve(result)}

})

})

promise.then((result)=>{

​ console.log(result);

})

.catch((err)=>{console.log(err)})

如果成功调用resolve,失败调用reject

es7新增异步函数

在普通函数前加async关键字,默认返回promise

eg: anync function fn (){

throw"发生了一些错误"

return 123;

}

fn().then(function(data){

​ console.log(data)

}).catch(function(err){

​ console.log(err)

})

throw抛出异常,使用catch接收,throw后的代码不执行

async内部有await方法,可以暂停函数的执行,只有有返回值才执行

promisify方法可以改造异步方法比如fs方法,返回一个prominse对象

在调用Promisify方法

eg:const promisify = require("util").promisify

const readFile = promisify(fs.readFile)

在浏览器中去全局对象是window,在node中全局对象是gobal

数据库

网站的数据是存储在数据库中

mongoDB 基于JSON

mysql 用于PHP

第三方模块mongooes

需要启动MongoDB net stat MongoDB

增删改查

EXPRESS框架

使用npm install express命令进行下载

框架特性

提供了简洁的路由定义

对获取http请求参数进行简化处理

对模板引擎支持程度高,方便渲染html

提供了中间件机制有效控制http请求

拥有大量第三方中间件对功能进行扩展

中间件

中间件就是一堆方法,可以接收客户端发来的请求,也可以对请求做出响应,也可以将请求交给下一个中间件处理

中间件由中间件方法(由框架提供),请求处理函数(开发人员提供)

可以针对同一个请求设置多个中间件

中间件默认从上到下匹配,匹配成功就终止匹配,可以使用next方法将请求的控制权交给下一个中间件

中间件常用来做登录保护,没有登录就不调用next方法

还可以在网站维护时设置中间件,拦截所有路由

可以自定义404页面,在所有路由最后定义,代表上面的都没有匹配,使用res.status设置状态码

框架模板引擎

unique可以判断数据是否重复

serializeArray可以获取表单中用户输入的内容,默认是数组内部有两个值,一个是name即表单的name,一个是value,即表单的value

密码加密

第三方模块bcrypt,单程加密,可以在密码中加入随机字符串增加密码的破解难度

cookie和session

cookie是服务器在第一次响应客户端请求的时候存储在客户端,在下一次请求服务器时,会自动发送cookie中的储存数据给服务器端,cooike是有过期时间的

session是一个对象,可以储存多条数据 ,每条数据都有对应的sessionid作为标识,页面关闭session就失效了

 

原文地址:https://www.cnblogs.com/JC30705/p/15114933.html