node学习笔记(一)

学习目标

  • 优秀的前端——可以和后端有效的沟通
  • 敏捷的全栈——快速开发全栈应用
  • 基本的架构师——践行工程化思想

Node是什么?

Node.js 是一个基于 Chrome V8 引擎,异步驱动的 JavaScript 运行时。

处理并发

由于处理器和内存速度快,但是存储速度慢,所以如果单线程的话,需要等待很长时间

几种语言与并发的处理:

  • 多进程——C
  • 多线程——JAVA
  • 异步I/O——JavaScript
  • 协程——lua,go
  • 下一代——deno

因为node是JavaScript的运行时,所以他也是异步I/O的。

关于协程:

协程不是进程或线程,其执行过程更类似于子例程,或者说不带返回值的函数调用。
一个程序可以包含多个协程,可以对比与一个进程包含多个线程,因而下面我们来比较协程和线程。
我们知道多个线程相对独立,有自己的上下文,切换受系统控制;
而协程也相对独立,有自己的上下文,但是其切换由自己控制,由当前协程切换到其他协程由当前协程来控制。

前后端对比

相同点:
JavaScript的核心语法是不变的
不同点:
前端:BOM,DOM
后端:fs,http,buffer,event,os

运行node程序

node 文件名

由于每次修改js文件都需要重新执行才可以生效,为便捷可以安装nodemon来监视文件的改动,以便他可以自动重新执行

nodemon 文件名

小提示:
在进行调试使,最好用console.log或者alert会更好一些,因为debug会产生截断,也会影响实际执行效果。

使用模块

  • node内建模块

require(‘os’)

  • 第三方模块

先用npm安装模块,然后调用
require(‘cpu-state’);

  • 自定义模块

导出
module.exports = {}
导入
require(’./conf’)

核心API

fs

const fs = require('fs');
  • 同步
const data = fs.readFileSync('./package.json');// 直接读取为二进制,为buffer对象
console.log(data.toString());// 默认为utf-8的模式
  • 异步
fs.readFile('./package.json',(err,data) => {
 	console.log(data.toString());
})
  • 一般异步方法
const {promisify} = require('util');
const readFile = promisify(fs.readFile)

readFile('./package.json').then(data => {
     console.log(data.toString())
})
  • async await 异步方法
(async => {
    const {promisify} = require('util');
    const readFile = promisify(fs.readFile)
    
    const data = await readFile('./package.json')
        console.log(data.toString())
    
}) ()

buffer

const buf1 = Buffer.alloc(10);  // 开辟内存空间,10个字节
console.log(buf1)

const buf2 = Buffer.from([1,2,3])   // 二进制的1,2,3
console.log(buf2)

const buf3 = Buffer.from('Buffer创建方法');
console.log(buf3.toString())

buf1.write('hello');    // 写入
console.log('buf1:',buf1)

const buf4 = Buffer.concat([buf1,buf3]);    // 拼接
console.log(buf4.toString())
console.log(buf4.toJSON())

http

const http = require('http');
const fs = require('fs')
const server = http.createServer((req, res) => {
    const {url,method,headers} = req;
    console.log('request', url)
    console.log('request', method)
    if (req.url !== "/favicon.ico") {
        // 返回网页
        if (url === '/' && method === 'GET') {
            fs.readFile('index.html', (err, data) => {
                if (err) {
                    // writeHead 可以设置一组头信息
                    res.writeHead(500, {
                        'Content-Type': 'text/plain;charset=utf-8'
                    })
                    res.end('Server Error 服务器错误')
                } else {
                    res.statusCode = 200;
                    // setHeader 只能一组一组设置信息
                    res.setHeader('Content-Type', 'text/html')
                    res.end(data)
                }
            })
        }
        // 返回ajax请求
        else if (url === '/users' && method === 'GET') {
            res.writeHead(200, {
                'Content-Type': 'application/json;charset=utf-8'
            })
            res.end(Json.stringify({
                name: 'xia'
            }))
        }
        //返回图片
        else if (headers.accept.indexOf('image/*') !== -1 && method === 'GET') {
            fs.createReadStream('.' + url).pipe(res) //文件流
            // res.writeHead(200, {
            //     'Content-Type': 'application/json;charset=utf-8'
            // })
            // res.end(Json.stringify({name:'xia'}))
        }
    }
})

server.listen(3000) //监听300端口

以上为学习总结。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值