node知识点

  1. 谷歌浏览器内运行一个V8的JS引擎,该引擎负责接收JS代码,优化代码,然后在计算机上执行。

  2. node.js: JS代码用于服务器端脚本而开发的环境。

  • 开源
  • 跨平台:不局限于单一的操作系统或硬件架构
  • JS运行时环境
  1. node.js如何工作?
  • V8引擎:包含一个内存堆(数据存储)和调用堆栈(管理函数执行顺序的数据结构)。
  • Libuv:执行输入/输出(I/O)操作的C语言库。Libuv是跨平台的(可以在任何操作系统上运行),并且专注于异步I/O。
  • Event Loop:事件循环运行时,会检查调用栈是否为空。如果调用栈不空,它就会允许正在进行的进程继续。但如果调用栈为空,它就会将回调队列中的第一条指令发送给 JavaScript 引擎。然后,引擎会将该指令(函数)放入调用栈并执行。

node知识点

      • 1.fs文件系统模块
      • 2.path路径模块
      • 3.http模块
      • 4.模块化

  1. node.js是基于谷歌V8引擎的JS运行环境。(后端) 在前端中运行环境为浏览器。

  2. 查看node版本号: node -v

  3. 在node.js中执行js代码:

     1. 进入终端
     2. 输入node要执行的JS文件名
    

1.fs文件系统模块

fs模块时Node.js提供, 用来操作文件的模块,提供了一系列方法和属性,用来满足需求。
1. fs.readFile()读物指定文件中的内容

        fs.readFile(path[, options], callback)
        path: 字符串, 表示文件路径
        options: 以什么编码格式来读取文件(默认指定utf8)
        callback: 文件读取完成后, 通过回调函数拿到读取结果(err, dataStr)。
        注意:读取成功,则err为null
             读取失败, err为错误对象,datastr为undefined

2.  **fs.writeFile()指定文件中写入内容**

        fs.writeFile(file, data[, options], callback)
        file: 指定一个文件路径的字符串,表示文件的存放路径。
        data: 写入的内容
        options: 什么格式写入文件内容 
        callback: 文件写入完成后的回调函数

join() 将数组转化为字符串,是关于数组的方法。
split() 将字符串切割成数组,是关于字符串的方法。


处理文件路径问题:
在使用fs模块操作文件时,如果提供的操作路径以./或…/开头的相对路径时,很容易出现路径动态拼接错误的问题。
原因: 是因为代码在运行的时候,会以执行node命令时所处的目录,动态拼接出被操作文件的完整路径。
解决: 使用fs模块操作文件时,给出完整路径—绝对路径

    __dirname表示当前文件所处的目录

2.path路径模块

处理路径的模块。

  1. path.join() 多个路径片段拼接为完整的路径字符串。

     path.join([...paths])
     ...paths路径片段的序列
     返回值 
    
  2. path.basename() 获取路径中最后一部分,通常获取路径中的文件名。

     path.basename(path[, ext])
     path, 表示一个路径的字符串
     ext, 表示文件扩展名
     返回:表示路径中的一部分
    
  3. path.extname() 可以获取路径中的扩展部分

     path.extname(path)
     path, 表示一个路径的字符串
     返回:返回得到扩展名的字符串
    

3.http模块

用来创建web服务器的模块。

  1. 创建web服务器的基本步骤:

     1. 导入http模块
     2. 创建web服务器实例
     3. 为服务器实例绑定request事件,监听客户端请求
     4. 启动服务器
    

// 1. 导入HTTP模块
const http = require('http')

// 2. 创建web服务器实例
const server = http.createServer()

// 3. 为服务器实例绑定request事件,触发回调函数,
// 里面有req请求对象(包含客户端相关数据和属性), 
// res参数(向客户端返回相应内容) res.end()向客户端发送指定的内容,并结束这次请求的处理过程
server.on('request', function(req, res){
    console.log('someone visit web server');
})

// 4. 启动服务器
server.listen(80, function(){
    console.log('server running at http://127.0.0.1');
}) 

注意: 当调用res.end()方法,向客户端发送中文内容的时候,会出现乱码问题
解决办法: res.setHeader(‘Content-Type’, ‘text/html; charset=utf-8’)


  1. 根据不同的url响应不同的html内容

     基本步骤:
     1. 获取请求的url地址
     2. 设置默认的响应内容
     3. 判断用户请求的是否为 / 或者 /index.js
     4. 判断用户请求的是否是/about.html
     5. 设置Content-Type 响应头,防止中文乱码
     6. 使用res.end() 把内容响应给客户端
    

4.模块化

模块化是指解决一个复杂问题时,自顶向下逐层把系统划分成若干模块的过程。对于整个系统来说,模块是可组合、分解和更换的单元。

加载模块: 使用require(),可以加载需要的内置模块、用户自定义模块、第三方模块使用。

当使用require()方法加载其他模块时,会执行加载模块中的代码。


向外共享模块作用域中的成员:

module对象: 每一个 .js自定义模块中都有一个module对象,它里面存储了和 当前模块有关的信息

module.exports 对象:(默认为空对象)
在自定义模块中,可以使用module.exports对象,将模块内的成员共享出去,供外界使用。
外界用require()方法导入自定义模块时,得到的就是module.exports所指向的对象。

exports对象: 和module.exports指向一样,但是最终以module.exports所指向对象为主。


你可能感兴趣的:(node.js搭建后台,node.js)