nodejs 笔记1 基础知识

是什么

基于chrome v8引擎的js运行环境

浏览器是JS的前端运行环境,浏览器提供DOM,BOM,AJAX等API
NODE是JS的后端运行环境,NODE提供FS,PATH,HTTP等API

为什么

使用JS语言完成前端以外的工作

  • 构建WEB应用(Express)
  • 跨平台桌面应用(Electron)
  • API接口项目(restify)

运行JS

node hello.js

内置模块

FS文件系统

  • 读取文件
// 导入模块
const fs = require('fs')
// 参数:路径,编码格式(可选,默认utf8),处理读取结果回调
fs.readFile('./1.txt', 'utf8', function(err, dataStr) {
})
  • 写入文件
// 参数:路径,内容,编码格式(可选,默认utf8),处理写入完成回调
fs.writeFile('./1.txt', 'abc', 'utf8', function(err) {
}

PATH路径

// 导入模块
const path = require('path')
// 拼接路径 
path.join('\a','\b','..\c')
// 获取文件名
filepath = '/a/b/index.html'
path.basename(filepath) // 带扩展名 index.html
path.basename(filepath,'.html') // 去扩展名 index
// 获取扩展名
path.extname(filepath) // .html

HTTP

// 导入模块
const http = require('http')
// 创建服务
const server = http.createServer()
// 监听请求
server.on('request', (req, res) => {
	// req.url 请求地址
	// req.method 请求方法
	// 设置响应头
	req.setHeader('Content-Type', 'text/html; charset=utf-8')
	fs.readFile(path.join(__dirname,url), (err, dataStr) => {
	  // 向客户端发送内容,并结束请求处理过程
	  if(err) return res.end('404 Not found')
	  res.end(dataStr)
	})
})
// 启动服务(端口,启动完成回调)
server.listen(80, () => {})

模块化

内置模块:fs,path,http…
自定义模块:js文件

加载模块

const module = require(‘mname’)
加载模块时,会执行被加载模块中的代码
参数可以是:

  1. 内置模块名(fs,path,http…)
  2. js文件路径
  3. 第三方包名
  4. 包路径
    注,如果为第三方包名或包路径时将导入包路径下(第三方包在node_modules目录下)配置文件(package.json)中main属性指向的入口js文件

模块作用域

自定义模块中定义的变量方法等成员,只能在模块内访问

向外共享模块成员

模块内有一个module对象,保存了模块信息

console.log(module)
Module {
id:’’,
path: ‘’,
exports: ‘’, // 共享出去的成员
parent: null,
filename: ‘’,
loaded: false,
children: [],
paths: []
}

导入模块时获得的对象就是module.exports所指向的对象,模块内还有一个exports对象,默认指向module.exports对象,

  • 向module.exports上挂载成员
module.exports.username = '路过君'
exports.sayHello = function() {
	console.log('hello')
}
// 或(注,此操作将导致模块内exports对象与module.exports不一致,最终导出对象以module.exports为准)
module.exports = {
	username: '路过君',
	sayHello: function() {...}
}
// 以下写法无效,导出结果以module.exports为准
exports = {
	username: '路人甲'
}
// mymodule == {username: '路过君', sayHello: function() {...}}
const mymodule = require('mymodule')

模块化规范

CommonJS规范,规定模块特性,模块间如何互相依赖

  1. 模块内部,module变量代表当前模块
  2. module.exports属性是对外接口
  3. require()加载模块,其实是加载module.exports属性

posted on 2022-04-11 22:38  路过君  阅读(23)  评论(0编辑  收藏  举报

导航