前端对Node的理解

文章介绍了Node.js的基本概念,包括它是JavaScript的运行时环境,允许JavaScript脱离浏览器运行。内容涵盖Node.js的运行环境差异,如前后端的区别,以及文件系统的读写操作,重点讲解了流的概念和使用,包括流式读写及管道操作。此外,还涉及到了简单的HTTP服务器创建和Express框架的接口实现。

目录

什么是Node

运行环境

基本模块:文件

读取文件

 写入文件

 流 

流式读取 

 流式写入

 管道pipe

一个简单的HTTP

Express接口实现

 安装依赖包

 接口请求方式

接口测试

接口实现 


什么是Node

Node.js是一个基于 Chrome V8 引擎的JavaScript运行时

avaScript 诞生于 1995 年,几乎是和互联网同时出现;Node.js 诞生于 2009 年,比 JavaScript 晚了 15 年左右。

在 Node.js 之前,JavaScript 只能运行在浏览器中,作为网页脚本使用,为网页添加一些特效,或者和服务器进行通信。有了 Node.js 以后,JavaScript 就可以脱离浏览器,像其它编程语言一样直接在计算机上使用,想干什么就干什么,再也不受浏览器的限制了。

Node.js 不是一门新的编程语言,也不是一个 JavaScript 框架,它是一套 JavaScript 运行环境,用来支持 JavaScript 代码的执行。用编程术语来讲,Node.js 是一个 JavaScript 运行时(Runtime)。

运行环境

前端框架如vue,运行在浏览器环境

nodejs运行在后端服务器,系统有:window,server,linux

相同:

        都是Js,语法相同

不同:

        前端运行在浏览器,可以操作DOM元素

        后端是使用js去操作数据库,文件,缓存服务等等

基本模块:文件

读取文件

引入fs模块,使用readFileSync同步方法对文件进行读取

// 引入fs模块
var fs = require('fs');
//引入路径
var path = require('path');

//从当前目录下拼接出绝对路径
var url = path.resolve(__dirname, './love.txt')

//同步读取文件内容
var data = fs.readFileSync(url, 'utf8')

console.log(data)

 写入文件

// 引入fs模块
var fs = require('fs');
//引入路径
var path = require('path');

//从当前目录下拼接出绝对路径
var url = path.resolve(__dirname, './love.txt')

//writeFileSync同步方法 对文件进行修改
fs.writeFileSync(url,'这是我修改love.txt的字符串')

 流 

二进制数据,流是一个在node中与流数据工作的抽象接口,stream模块提供了一个基本的API,使得比较容易创建一个实现了流的接口的对象。

数据被读取/写入时,这个过程数据在流动,在数据流动过程中能对数据进行操作截取修改等

流式读取 

在nodejs的文件模块中我们使用了readFile和writeFile,这两种方式在读取、写入体量较小的文件时使用体验较为良好,但是一旦文件体量较大时,就会明显出现卡顿,引发内存溢出等问题,针对这个问题,我们可以用流式读取来做到完美解决。

// 引入fs模块
var fs = require('fs');
//引入路径
var path = require('path');

//从当前目录下拼接出绝对路径
var url = path.resolve(__dirname, './love.txt')

//创建一个文件流
var rs = fs.createReadStream(url,'utf-8');

//分块读取数据
rs.on('data', function (chunk) {
    console.log(chunk)
})
 
//结束
rs.on('end', function () {
    console.log('读取完毕')
})

//报错
rs.on('error', function (err) {
    console.log(err)
})

 

 流式写入

// 引入fs模块
var fs = require('fs');
//引入路径
var path = require('path');

//从当前目录下拼接出绝对路径
var url = path.resolve(__dirname, './love.txt')

//写入文件
var ws = fs.createWriteStream(url,'utf-8');

ws.write('流式写入 \n')    //  \n换行
ws.write('写入完毕')
ws.end()
 

 管道pipe

不论是rs.on() 还是 readFile(),将一个文件读取并写入到另一个文件都需要两个各自方法的两个函数搭配使用才能达成效果,这样较为麻烦,而pipe方法可以完美解决这个问题

pipe为管道的意思,rs.pipe(ws)是将可读流与可写流直接连通在一起,自动完成数据的读写

// 引入fs模块
var fs = require('fs');
//引入路径
var path = require('path');

//从当前目录下拼接出绝对路径
var url = path.resolve(__dirname, './love.txt')

//准备写入的路径
var url2 = path.resolve(__dirname, './love2.txt')

//读取的文件
var read = fs.createReadStream(url,'utf-8');
var write =fs.createWriteStream(url2,'utf-8');
//将 love.txt的文件内容 通过管道pipe的方法,直接写入到love2文件内
read.pipe(write);
 

一个简单的HTTP请求

//最简单的http服务
var http = require('http')

//req == request, res ==response
var server = http.createServer(function(req, res){
    //浏览器请求的方法,地址
    console.log(req.method+":"+req.url)
    //简单的判断
    if(req.url.includes('/api/name')){
        //返回name
    }
    //状态200
    res.writeHead(200,{'Content-Type': 'text/html'})
    //返回一个简单的标题
    var html="<h1>hello word</h1>\n"
    res.end(html)
})

server.listen(8000,function(){
    console.log('8000端口已启动')
})

Express接口实现

Express是一个保持最小规模的灵活的Node.js Web应用程序开发框架,为Web和移动应用提供一组强大的功能

 安装依赖包

1.创建package.json,命令 npm init

2.npm i安装依赖包

3.cnpm i -S express

启动命令 

cmd打开命令窗口

输入:

        node  文件名

 接口请求方式

get,put,post,delete,option..

接口测试

浏览器上只能执行get请求,get参数才url后用?拼接

其余类型请求使用后postman发送,如post请求,参数在请求体body内

接口实现 

//加载依赖包对象
var express = require('express')
//构建一个框架实例对象
var app = express()

//配置请求体的解析
app.use(express.json()) //前端发送的json数据
app.use(express.urlencoded({
    extended: true
})) //解析前端发送的表单数据

//本地端口 get请求
app.get('/', function (req, res) {
    res.status(200).send('hello!')
})

//post请求
app.post('/api/data', function (req, res) {
    console.log('api/data', req.body)
    var obj = {
        name: 'xiaoMing',
        data: req.body
    }
    //将json返回给前端
    res.status(200).json(obj)
})


//get请求
app.get('/api/data1', function (req, res) {
    console.log('api/data1', req.query)
    var obj = {
        name: 'xiaoMing',
        data: req.query
    }
    //将json返回给前端
    res.status(200).json(obj)
})


app.listen(8000, function () {
    console.log('8000端口已启动')
})

Node项目架构调整

架构调整是为了将逻辑拆分,降低耦合,利于维护和多人协作,提高复用和开发效率的必要环节。

由于node不能使用模块化,这里我们新增一个babel模块化的配置文件,项目文件配置如下

Node项目源码地址:

链接:https://pan.baidu.com/s/124Gmwvh8lafPkNJKe6PmWg?pwd=356j 
提取码:356j

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值