nodejs的认识与基础模块操作


提示:以下是本篇文章正文内容,下面案例可供参考

一、nodejs是什么?

node.js是基于Chrome v8引擎的javascript runtime

  • commonjs规范

node应用于各种包各种模块组成,采用的commonjs模块规范
commonjs加载模块是同步的,模块加载的顺序,按照其在代码中出现的顺序
require引入模块 module.exports 属性表示当前模块对外输出的接口

  • 特点

单线程
非阻塞I/O(input/output)
事件驱动

  • 模块化

内置模块、第三方模块、自定义模块

二、使用

1.安装

下载地址:https://nodejs.org/en/

三、运行程序

js运行环境

  • 浏览器(基本语法、dom、bom、ajax请求…)

  • 服务器(基本语法、操作本地文件、操作数据库…)

  • 限制语言能力的不是语言本身,而是语言的运行环境

运行nodejs程序

  • 在命令行中执行node指令并回车,进行node的交互式环境(REPL环境)
  • 把javascript代码写在后缀为.js的文件中,命令行执行:node xx.js
  • 按下 ctrl + c 退出当前执行程序
  • node.js是服务端的程序,写的js语句,都将运行在服务器上
  • node.js没有根目录、没有web容器的概念!

nodemon

  • nodemon会实时监听js代码,发现有修改后自动重启服务器
  • 安装:npm install --global nodemon
  • 之前使用:node xxx.js 改成:nodemon xxx.js

http模块

  • http 模块 可以用于创建http服务器与http客户端
  1. 创建http服务器
  • var http = require(‘http’); 加载http模块
  • var server = http.createServer(); 创建http服务
  • server.on(‘request’, callback); request事件用于监听来自客户端的请求
  • server.listen(port, host, callback); 启动http服务,监听3000端口
const http = require('http')
let server = http.createServer()
server.on('request' , (req, res) =>{
	// request 请求对象
	// response 响应对象
	console.log('有用户请求进来了')
	res.setHeader('Content-Type','text/plain;charset=utf-8')
	res.end('你好前端')
}
server.listen(3000, localhost, ()=>{
	console.log('======= server start ========')
}
  • 注意:
  1. 在监听request事件中,最后一定要res.end()结束响应。
  2. 浏览器显示中文可能是乱码,需设置响应头告诉浏览器显示时所使用的编码,要在res.end()之前设置响应头、状态码、响应内容类型及编码
    res.setHeader(“Content-Type”,“text/plain;charset=utf-8”);
    res.setHeader(“Content-Type”,“text/html;charset=utf-8”);
    res.writeHead(200,{‘Content-Type’:‘text/html;charset=utf-8’});
    Content-Type:用于定义用户的浏览器如何处理将要加载的数据

text/html 表示响应内容为html的形式,浏览器对响应内容按html解析
text/css 表示响应内容为css的形式,浏览器对响应内容按css解析
text/plain 表示响应内容为纯文本的形式,浏览器不会对其进行其它处理
application/json 表示响应内容为序列化后的 JSON 字符串

  1. 创建http客户端
  • http.get()
  • http.request()
const cheerio = require('cheerio')
const http = require('http')
const https = require('https')
// 创建http客户端
https.get(url, (res) => {
	let str = ''
	res.on('data', (chunk) => {
		// chunk 接收到的是数据片段
		str += chunk.toString('utf8')
	})
	res.on('end', ()=>{
		console.log('数据传输完毕')
	})
})

fs 模块

fs模块提供了用于与文件系统进行交互的API

  • fs.readFile(file[, options], callback) 读文件

参数1:要读取的文件路径,必填。
参数2:读取文件时的选项,比如:文件编码utf8。选填。
参数3:文件读取完毕后的回调函数,必填。

//  异步读取文件
fs.readFile('./test.txt','utf8',(err,data)=>{
// 错误的回调优先,err默认值为null,如果有错err是一个错误对象
	if(err){
		console.log(err)
	} else {
		console.log(data) // 默认Buffer二进制数据流
	}
})

// 同步读取文件,在关键位置捕获错误 try {} catch(){}
try {
	var data = fs.readFileSync('./text.txt, 'utf-8')
} catch (err) {
	console.log( err )
}
  • fs.writeFile(file, data[, options], callback) 写文件

参数1:要写入的文件路径,必填。
参数2:要写入的数据,必填。
参数3:写入文件时的选项,比如:文件编码。选填。
参数4:文件写入完毕后的回调函数,必填。

// 异步写文件(覆盖写入),如果当前文件不存在则创建此文件
fs.writeFile('./text.txt', data , (err) => {
	if (err) {
		console.log('写入失败')
	} else {
		console.log('写入成功'
	}
})
  • fs.appendFile(file, data[, options], callback) 写文件
// 异步写文件(追加写入),如果当前文件不存在则创建此文件`
fs.appendFile('./text.txt', data , (err) => {
	if (err) {
		console.log('写入失败')
	} else {
		console.log('写入成功')
	}
})
  • fs.unlink() 删除文件
  • fs.mkdir() 创建文件夹
// 删除文件
fs.unlink('./demo.html',(err)=>{
  if (err) {
    console.log('删除失败');
  } else {
    console.log('删除成功');
  }
})

// 创建文件夹
fs.mkdir('./hehe',(err)=>{
    if (err) {
    console.log('创建失败');
  } else {
    console.log('创建成功');
  }
})
  • fs.readdir() 读取文件夹
fs.readdir('./hehe',(err, data)=>{
  if (err) {
    console.log('读取失败');
  } else {
    console.log(data) // [ 数组集合 ]
  }
})
  • fs.rmdir() 删除文件夹(只能删除空文件夹)
fs.rmdir('./hehe',(err)=>{
  if (err) {
    console.log('删除失败');
  } else {
    console.log('删除成功');
  }
})
  • fs.rename() 文件重命名
  • fs.stat() 获得文件信息
    stats.isFile()
    stats.isDirectory()
// 判断是文件还是文件夹
fs.stat('./test.txt',(err,stats)=>{
  if (err) {
    console.log('获取文件信息失败');
  } else {
    console.log( stats.isFile() )// true 代表这个是文件
    console.log( stats.isDirectory() )// true 代表这个是文件夹
  }
})

url 模块

url 模块 用于处理与解析 URL
url 叫统一资源定位符

  • url.parse()方法 将url字符串转成对象
  • url.format()方法 将url对象转成字符串
let urlStr = 'https://www.baidu.com/ss/abc?wd=directory&spt=123&issp=888#head'
// 将url字符串转成对象
// let urlObj = url.parse(urlStr,false) // 第二个参数默认为false,query部分为字符串
let urlObj = url.parse(urlStr,true) // 第二个参数默认为true,query部分为对象
console.log( urlObj );
let url_o = {
  protocol: 'https:',
  slashes: true,
  auth: null,
  host: 'www.baidu.com',
  port: null,
  hostname: 'www.baidu.com',
  hash: '#head',
  search: '?wd=directory&spt=123&issp=888',
  // query: 'wd=directory&spt=123&issp=888',
  query: { wd: 'directory', spt: '123', issp: '888' },
  pathname: '/ss/abc',
  path: '/ss/abc?wd=directory&spt=123&issp=888',
  href: 'https://www.baidu.com/ss/abc?wd=directory&spt=123&issp=888#head' 
}

// 将url对象转成字符串
let url_s = url.format(url_o)
console.log(url_s);// https://www.baidu.com/ss/abc?wd=directory&spt=123&issp=888#head


querystring 模块

querystring模块提供用于解析和格式化URL查询字符串的实用工具

  • qs.parse() 将query字符串转成对象
  • qs.stringify 将对象转成query字符串
  • qs.escape query字符串编码
  • qs.unescape query字符串解码
// 将对象转成query字符串
// 第一个参数是要转换的对象
// 第二个参数是键值对之间的分隔符
// 第三个参数是键和值之间的分隔符
let obj = { wd: 'directory', spt: '123', issp: '888' }
console.log( qs.stringify(obj1) );// 'wd=directory&spt=123&issp=888'
// 等价于
console.log( qs.stringify(obj1,'&','=') ) // 'wd=directory&spt=123&issp=888'

// query字符串转成对象
let str = 'wd=directory&spt=123&issp=888'
console.log( qs.parse(str) );// { wd: 'directory', spt: '123', issp: '888' }
// 等价于
console.log( qs.parse(str,'&','=') );// { wd: 'directory', spt: '123', issp: '888' }

path 模块

path模块提供用于处理文件路径和目录路径的实用工具
path模块的默认操作会根据Node.js程序运行的操作系统而有所不同

  • path.join(path1[, path2]…) 将多个路径规范化拼接,返回拼接后的路径
  • path.resolve([…paths]) 将一系列路径解析成绝对路径,从右到左解析
    如果没有参数调用,返回当前工作路径
  • path.basename(path[, ext]) 返回路径的最后部分(文件名)
    path目标路径,ext要截掉的内容
  • path.dirname(path) 与basename相对,返回除最后一部分的前面部分路径
const path = require('path')

// 从右到左拼接
// join拼接返回相对路径
console.log( path.join('/user','login','index.html') );// '\user\login\index.html'
console.log( path.join('user','/login','./index.html') );// 'user\login\index.html'
console.log( path.join('user','../login','./index.html') );// 'login\index.html'


// resolve拼接返回绝对路径
console.log( path.resolve('/user','login','index.html') );
// D:\user\login\index.html

console.log( path.resolve('user','/login','./index.html') );
// D:\login\index.html

console.log( path.resolve('user','../login','./index.html') );
// D:\phpstudy_pro\WWW\test\2005\node\day01\login\index.html

let path1 = 'node/day01/login/index.html'
// 返回路径的最后一部分(文件名)
console.log( path.basename(path1) );// 'index.html'
console.log( path.basename(path1,'.html') );// 'index'

// 返回除了path.basename之外的内容
console.log( path.dirname(path1) );// 'node/day01/login'

四、第三方模块

nodemailer 发送邮件模块

第三方模块nodemailer用于发送邮件
安装:npm install nodemailer
查看官方文档:https://nodemailer.com/about/

// 安装nodemailer模块, 查找\node_modules\nodemailer\lib\well-known -> service.json
const nodemailer = require("nodemailer")
let transporter = nodemailer.createTransport({
  host: "smtp.qq.com",// 发送者的邮箱主机名(service.json)
  port: 465,// 端口号
  secure: true, // 端口为465时为true,其他端口为false
  auth: {
    user: 'xxxxxx@qq.com', // 发送者的邮箱地址,如:12345678@qq.com
    pass: 'bymhx123123123', // 发送者邮箱的smtp授权码
  }
})

// 邮件信息对象
let mailInfo = {
  from: '"x站管理员" <xxxxxx@qq.com>', // 发送者(昵称,邮箱地址)
  to: "aaaaaaa@qq.com", // 接收邮件者邮箱地址列表
  subject: "注册验证码", // 邮件主题
  text: "您的验证码是12365有效为5分钟", // 文本格式的内容
  // html: "<b>Hello world?</b>", // html格式的内容
}
// 文本格式的内容和html格式的内容 只能二选一

// 发送邮件
transporter.sendMail(mailInfo)

cheerio 模块

cheerio是实现类似jquery核心功能的一个模块
cheerio可以将字符串解析成DOM文档,像用jquery操作html一样方便
安装:npm install cheerio

const cheerio = require('cheerio')
// cheerio可以将字符串解析成DOM文档,像用jquery操作html一样方便
let $ = cheerio.load('<div><img src="./a1.jpg"/><img src="./a2.jpg"/></div>')
// 获取多个元素,遍历取值
$('img').each((i, item)=>{
  let src = $(item).attr('src')
  console.log(src)
})

apidoc 模块

apidoc用于生成一个REST风格的Web API文档。
安装:npm install apidoc -g
地址:https://apidocjs.com/
生成api文档:apidoc -i ./router -o ./apidoc

说明: 编译当前目录下router文件夹中的所有文件,输出到当前目录下的doc文件夹中
项目根目录创建 apidoc.json

{
“name”: “用户”,
“version”: “0.1.0”,
“description”: “用户登录、注册接口文档”,
“title”: “接口文档”,
“url” : “http://127.0.0.1:3000”
}

注释示例:

/**
 * @api {post} /user/login 用户登录
 * @apiGroup user
 *
 * @apiParam {String} user 用户账号
 * @apiParam {String} pass 用户密码
 *
 * @apiSuccessExample 返回数据示例:
 * {
 *     "err": 0,
 *     "msg": "登录成功"
 * }
 */

五、全局变量

__dirname 表示当前执行的脚本所在目录的绝对路径 如:D:\phpstudy_pro\WWW\test\GP03\day33

__filename 表示当前执行的脚本文件的绝对路径 如:D:\phpstudy_pro\WWW\test\GP03\day33\test.js

process是一个全局进程模块
console.log( process.env ) 当前的环境信息
console.log(process.argv[2] ) 获取输入的命令

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值