基于chrome v8引擎的js运行环境
浏览器是JS的前端运行环境,浏览器提供DOM,BOM,AJAX等API NODE是JS的后端运行环境,NODE提供FS,PATH,HTTP等API
使用JS语言完成前端以外的工作
node hello.js
// 导入模块
const fs = require('fs')
// 参数:路径,编码格式(可选,默认utf8),处理读取结果回调
fs.readFile('./1.txt', 'utf8', function(err, dataStr) {
})
// 参数:路径,内容,编码格式(可选,默认utf8),处理写入完成回调
fs.writeFile('./1.txt', 'abc', 'utf8', function(err) {
}
// 导入模块
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
// 导入模块
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’) 加载模块时,会执行被加载模块中的代码 参数可以是:
自定义模块中定义的变量方法等成员,只能在模块内访问
模块内有一个module对象,保存了模块信息
console.log(module) Module { id:’’, path: ‘’, exports: ‘’, // 共享出去的成员 parent: null, filename: ‘’, loaded: false, children: [], paths: [] }
导入模块时获得的对象就是module.exports所指向的对象,模块内还有一个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规范,规定模块特性,模块间如何互相依赖