程序员柳
做一个开心快乐的程序员,专业解决计算机课程设计、毕业设计、期末大作业
展开
-
如何利用Vue快速创建一个在线电子表格
利用MVVM,很多非常复杂的前端页面编写起来就非常容易了。这得益于我们把注意力放在Model的结构上,而不怎么关心DOM的操作。本节我们演示如何利用Vue快速创建一个在线电子表格:原创 2023-04-25 08:40:43 · 751 阅读 · 0 评论 -
MVVM框架如何实现Model和DOM的结构保持同步
我们可以在浏览器console中用window.vm.todos[0].name='计划有变’查看View的变化,或者通过window.vm.todos.push({name:‘新计划’,description:‘blabla…需要注意的是,Vue之所以能够监听Model状态的变化,是因为JavaScript语言本身提供了Proxy或者Object.observe()机制来监听对象状态的变化。除了简单的单向绑定和双向绑定,MVVM还有一个重要的用途,就是让Model和DOM的结构保持同步。原创 2023-04-24 11:04:45 · 214 阅读 · 0 评论 -
MVVM框架如何实现双向绑定
我们可以在表单中输入内容,然后在浏览器console中用window.vm.$data查看Model的内容,也可以用window.vm.name查看Model的name属性,它的值和FORM表单对应的是一致的。填写表单就是一个最直接的例子。当用户提交表单时,传统的做法是响应onsubmit事件,用jQuery获取表单内容,检查输入是否有效,最后提交表单,或者用AJAX提交表单。有单向绑定,就有双向绑定。现在,获取表单内容已经不需要了,因为双向绑定直接让我们获得了表单内容,并且获得了合适的数据类型。原创 2023-04-23 08:46:41 · 618 阅读 · 0 评论 -
MVVM框架哪家强?基于Vue实现MVVM框架
要特别注意的是,在内部编写的JavaScript代码,需要用jQuery把MVVM的初始化代码推迟到页面加载完毕后执行,否则,直接在内执行MVVM代码时,DOM节点尚未被浏览器加载,初始化将失败。这里需要注意,vue.js是未压缩的用于开发的版本,它会在浏览器console中输出很多有用的信息,帮助我们调试代码。MVVM就是在前端页面上,应用了扩展的MVC模式,我们关心Model的变化,MVVM框架自动把Model的变化映射到DOM结构上,这样,用户看到的页面内容就会随着Model的变化而更新。原创 2023-04-21 14:12:49 · 526 阅读 · 0 评论 -
什么是MVVM?一个MVVM框架和jQuery操作DOM相比有什么区别?
如果要针对不同的用户显示不同的页面,显然不可能给成千上万的用户准备好成千上万的不同的html文件,所以,服务器就需要针对不同的用户,动态生成不同的html文件。于是,人们又发现,其实拼字符串的时候,大多数字符串都是HTML片段,是不变的,变化的只有少数和用户相关的数据,所以,又出现了新的创建动态HTML的方式:ASP、JSP和PHP——分别由微软、SUN和开源社区开发。由于前端开发混合了HTML、CSS和JavaScript,而且页面众多,所以,代码的组织和维护难度其实更加复杂,这就是MVVM出现的原因。原创 2023-04-20 10:05:07 · 304 阅读 · 0 评论 -
开发自己的REST API
这样,客户端既可以简单匹配某个类别的错误,也可以精确匹配某个特定的错误。如果API路径带有参数,参数必须用:表示,例如,DELETE /api/products/:id,客户端传递的URL可能就是/api/products/A001,参数id对应的值就是A001,要获得这个参数,我们用ctx.params.id。原因在于,使用数字作为错误码时,API提供者需要维护一份错误码代码说明表,并且,该文档必须时刻与API发布同步,否则,客户端开发者遇到一个文档上没有写明的错误码,就完全不知道发生了什么错误。原创 2023-04-19 14:06:21 · 417 阅读 · 0 评论 -
如何编写REST API
bodyParser()这个middleware可以解析请求的JSON数据并绑定到ctx.request.body上,输出JSON时我们先指定ctx.response.type = ‘application/json’,然后把JavaScript对象赋值给ctx.response.body就完成了REST请求的处理。REST请求仍然是标准的HTTP请求,但是,除了GET请求外,POST、PUT等请求的body是JSON数据格式,请求的Content-Type为application/json;原创 2023-04-18 08:43:54 · 468 阅读 · 0 评论 -
基于WebSocket创建一个在线聊天室
要创建真正的WebSocket应用,首先,得有一个基于MVC的Web应用,也就是我们在前面用koa2和Nunjucks创建的Web,在此基础上,把WebSocket添加进来,才算完整。WS请求也是标准的HTTP请求,所以,服务器也会把Cookie发送过来,这样,我们在用WebSocketServer处理WS请求时,就可以根据Cookie识别用户身份。现在第二个问题来了:在koa应用中,可以很容易地认证用户,例如,通过session或者cookie,但是,在响应WebSocket请求时,如何识别用户身份?原创 2023-04-17 09:45:45 · 338 阅读 · 0 评论 -
为什么WebSocket连接可以实现全双工通信而HTTP连接不行呢?WebSocket协议详解
实际上HTTP协议是建立在TCP协议之上的,TCP协议本身就实现了全双工通信,但是HTTP协议的请求-应答机制限制了全双工通信。首先,浏览器用wss://xxx创建WebSocket连接时,会先通过HTTPS创建安全的连接,然后,该HTTPS连接升级为WebSocket连接,底层通信走的仍然是安全的SSL/TLS协议。WebSocket是HTML5新增的协议,它的目的是在浏览器和服务器之间建立一个不受限的双向通信的通道,比如说,服务器可以在任意时刻发送消息给浏览器。原创 2023-04-14 09:48:32 · 674 阅读 · 0 评论 -
我们怎么用mocha来自动化测试Web应用程序呢?
可以手动检查响应对象,例如,res.body,还可以利用supertest提供的expect()更方便地断言响应的HTTP代码、返回内容和HTTP头。一个简单的想法就是在测试前启动koa的app,然后运行async测试,在测试代码中发送http请求,收到响应后检查结果,这样,一个基于http接口的测试就可以自动运行。在测试中,我们首先导入supertest模块,然后导入app模块,注意我们已经在app.js中移除了app.listen(3000);当所有测试运行结束后,app实例会自动关闭,无需清理。原创 2023-04-13 10:37:31 · 442 阅读 · 0 评论 -
mocha如何实现异步测试
用mocha测试一个函数是非常简单的,但是,在JavaScript的世界中,更多的时候,我们编写的是异步代码,所以,我们需要用mocha测试异步函数。这个async函数通过读取data.txt的内容获取表达式,这样它就变成了异步。紧接着,我们在test目录中添加一个await-test.js,测试hello.js的async函数。测试异步函数需要在函数内部手动调用done()表示测试成功,done(err)表示测试出错。编写异步代码时,我们要坚持使用async和await关键字,这样,编写测试也同样简单。原创 2023-04-11 09:48:58 · 417 阅读 · 0 评论 -
使用JavaScript编写第一个测试案例
这个函数非常简单,就是对输入的任意参数求和并返回结果。assert模块非常简单,它断言一个表达式为true。如果断言失败,就抛出Error。可以在Node.js文档中查看assert模块的所有API。单独写一个test.js的缺点是没法自动运行测试,而且,如果第一个assert报错,后面的测试也执行不了了。如果有很多测试需要运行,就必须把这些测试全部组织起来,然后统一执行,并且得到执行结果。这就是我们为什么要用mocha来编写并运行测试。原创 2023-04-10 14:49:44 · 563 阅读 · 0 评论 -
JavaScript的一种单元测试框架:mocha
如果你听说过“测试驱动开发”(TDD:Test-Driven Development),单元测试就不陌生。单元测试是用来对一个模块、一个函数或者一个类来进行正确性检验的测试工作。把上面的测试用例放到一个测试模块里,就是一个完整的单元测试。如果单元测试通过,说明我们测试的这个函数能够正常工作。如果单元测试不通过,要么函数有bug,要么测试条件输入不正确,总之,需要修复使单元测试能够通过。单元测试通过后有什么意义呢?原创 2023-04-07 14:06:11 · 441 阅读 · 0 评论 -
Node.js程序如何建立及使用Model
直接使用Sequelize虽然可以,但是存在一些问题。一个大型Web App通常都有几十个映射表,一个映射表就是一个Model。如果按照各自喜好,那业务代码就不好写。Model不统一,很多代码也无法复用。所以我们需要一个统一的模型,强迫所有Model都遵守同一个规范,这样不但实现简单,而且容易统一风格。原创 2023-04-06 13:32:41 · 665 阅读 · 0 评论 -
Node.js程序如何访问MySQL数据库呢?Sequelize操作MySQL数据库详解
当我们安装好MySQL后,Node.js程序如何访问MySQL数据库呢?访问MySQL数据库只有一种方法,就是通过网络发送SQL命令,然后,MySQL服务器执行后返回结果。我们可以在命令行窗口输入mysql -u root -p,然后输入root口令后,就连接到了MySQL服务器。因为没有指定–host参数,所以我们连接到的是localhost,也就是本机的MySQL服务器。输入exit退出MySQL命令行模式。对于Node.js程序,访问MySQL也是通过网络发送SQL命令给MySQL服务器。原创 2023-04-04 15:18:26 · 596 阅读 · 0 评论 -
Node.js程序如何访问MySQL数据库?
程序运行的时候,数据都是在内存中的。当程序终止的时候,通常都需要将数据保存到磁盘上,无论是保存到本地磁盘,还是通过网络保存到服务器上,最终都会将数据写入磁盘文件。而如何定义数据的存储格式就是一个大问题。你还可以定义各种保存格式,但是问题来了:存储和读取需要自己实现,JSON还是标准,自己定义的格式就各式各样了;不能做快速查询,只有把数据全部读到内存中才能自己遍历,但有时候数据的大小远远超过了内存(比如蓝光电影,40GB的数据),根本无法全部读入内存。原创 2023-04-03 14:24:39 · 403 阅读 · 0 评论 -
Node.js实现MVC模式
我们已经可以用koa处理不同的URL,还可以用Nunjucks渲染模板。现在,是时候把这两者结合起来了!当用户通过浏览器请求一个URL时,koa将调用某个异步函数处理该URL。原创 2023-03-31 09:53:45 · 398 阅读 · 0 评论 -
Nunjucks模板引擎,模板引擎就是基于模板配合数据构造出字符串输出的一个组件
Nunjucks是什么东东?其实它是一个模板引擎。那什么是模板引擎?模板引擎就是基于模板配合数据构造出字符串输出的一个组件。该模板引擎把模板字符串里面对应的变量替换以后,就可以得到以下输出:小明同学一年级期末考试语文78分,数学87分,位于年级第999名。模板引擎最常见的输出就是输出网页,也就是HTML文本。当然,也可以输出任意格式的文本,比如Text,XML,Markdown等等。有同学要问了:既然JavaScript的模板字符串可以实现模板功能,那为什么我们还需要另外的模板引擎?原创 2023-03-30 08:44:24 · 330 阅读 · 0 评论 -
Node.js处理URL模块详解
在hello-koa工程中,我们处理http请求一律返回相同的HTML,这样虽然非常简单,但是用浏览器一测,随便输入任何URL都会返回相同的网页。正常情况下,我们应该对不同的URL调用不同的处理函数,这样才能返回不同的结果。这么写是可以运行的,但是好像有点蠢。应该有一个能集中处理URL的middleware,它根据不同的URL调用不同的处理函数,这样,我们才能专心为每个URL编写处理函数。原创 2023-03-29 15:57:55 · 648 阅读 · 0 评论 -
Node.js的web框架koa2入门
首先,我们创建一个目录hello-koa并作为工程目录用VS Code打开。其中,参数ctx是由koa传入的封装了request和response的变量,我们可以通过它访问request和response,next是koa传入的将要处理的下一个异步函数。上面的异步函数中,我们首先用await next();处理下一个异步函数,然后,设置response的Content-Type和内容。由async标记的函数称为异步函数,在异步函数中,可以用await调用另一个异步函数,这两个关键字将在ES7中引入。原创 2023-03-28 10:34:00 · 838 阅读 · 0 评论 -
Node.js的web框架koa详解
koa是Express的下一代基于Node.js的web框架,目前有1.x和2.0两个版本。原创 2023-03-27 15:54:26 · 677 阅读 · 0 评论 -
用Node.js开发Web服务器端程序
随着互联网的兴起,人们发现,CS架构不适合Web,最大的原因是Web应用程序的修改和升级非常迅速,而CS架构需要每个客户端逐个升级桌面App,因此,Browser/Server模式开始流行,简称BS架构。由于Web页面是用HTML编写的,而HTML具备超强的表现力,并且,服务器端升级后,客户端无需任何部署就可以使用到新的版本,因此,BS架构迅速流行起来。常见的Web框架包括:Express,Sails.js,koa,Meteor,DerbyJS,Total.js,restify……原创 2023-03-24 14:05:46 · 423 阅读 · 0 评论 -
Nodejs实现通用的加密和哈希算法(MD5、SHA1、Hmac、AES、Diffie-Hellman、RSA),crypto模块详解
crypto模块的目的是为了提供通用的加密和哈希算法(hash)。用纯JavaScript代码实现这些功能不是不可能,但速度会非常慢。Nodejs用C/C++实现这些算法后,通过cypto这个模块暴露为JavaScript接口,这样用起来方便,运行速度也快。原创 2023-03-23 12:53:45 · 1416 阅读 · 0 评论 -
用Node.js实现一个HTTP服务器程序(文件服务器)
Node.js开发的目的就是为了用JavaScript编写Web服务器程序。因为JavaScript实际上已经统治了浏览器端的脚本,其优势就是有世界上数量最多的前端开发人员。如果已经掌握了JavaScript前端开发,再学习一下如何将JavaScript应用在后端开发,就是名副其实的全栈了。原创 2023-03-22 08:43:55 · 1595 阅读 · 0 评论 -
Node.js的stream模块详解,Node.js的readable.pipe()方法
stream是Node.js提供的又一个仅在服务区端可用的模块,目的是支持“流”这种数据结构。什么是流?流是一种抽象的数据结构。想象水流,当在水管中流动时,就可以从某个地方(例如自来水厂)源源不断地到达另一个地方(比如你家的洗手池)。我们也可以把数据看成是数据流,比如你敲键盘的时候,就可以把每个字符依次连起来,看成字符流。这个流是从键盘输入到应用程序,实际上它还对应着一个名字:标准输入流(stdin)。原创 2023-03-21 14:11:39 · 543 阅读 · 0 评论 -
Node.js的内置模块fs详解
Node.js内置的fs模块就是文件系统模块,负责读写文件。和所有其它JavaScript模块不同的是,fs模块同时提供了异步和同步的方法。回顾一下什么是异步方法。因为JavaScript的单线程模型,执行IO操作时,JavaScript代码无需等待,而是传入回调函数后,继续执行后续JavaScript代码。同步操作的好处是代码简单,缺点是程序将等待IO操作,在等待时间内,无法响应其它任何事件。而异步读取不用等待IO操作,但代码较麻烦。原创 2023-03-20 09:20:17 · 495 阅读 · 0 评论 -
Node.js的基本模块,global、process详解
因为Node.js是运行在服务区端的JavaScript环境,服务器程序和浏览器程序相比,最大的特点是没有浏览器的安全限制了,而且,服务器程序必须能接收网络请求,读写文件,处理二进制内容,所以,Node.js内置的常用模块就是为了实现基本的服务器功能。这些模块在浏览器环境中是无法被执行的,因为它们的底层代码是用C/C++在Node.js运行环境中实现的。原创 2023-03-17 09:01:22 · 599 阅读 · 0 评论 -
第一个Node程序,Node入门
在前面的所有内容中,我们编写的JavaScript代码都是在浏览器中运行的,因此,我们可以直接在浏览器中敲代码,然后直接运行。从本章开始,我们编写的JavaScript代码将不能在浏览器环境中执行了,而是在Node环境中执行,因此,JavaScript代码将直接在你的计算机上以命令行的方式运行,所以,我们要先选择一个文本编辑器来编写JavaScript代码,并且把它保存到本地硬盘的某个目录,才能够执行。那么问题来了:文本编辑器到底哪家强?首先,请注意,绝对不能用Word和写字板。原创 2023-03-14 15:28:36 · 239 阅读 · 0 评论 -
Node.js的前世今生,Node.js和npm安装教程
他评估了很多种高级语言,发现很多语言虽然同时提供了同步IO和异步IO,但是开发人员一旦用了同步IO,他们就再也懒得写异步IO了,所以,最终,Ryan瞄向了JavaScript。Chrome浏览器是跨Windows和Mac平台的,并且,Google认为要运行现代Web应用,浏览器必须有一个性能非常强劲的JavaScript引擎,于是Google自己开发了一个高性能JavaScript引擎,名字叫V8,以BSD许可证开源。分家后没多久,Joyent公司表示要和解,于是,io.js项目又决定回归Node.js。原创 2023-03-14 15:07:46 · 230 阅读 · 0 评论 -
搭建Node开发环境,Node.js的集成开发环境(IDE)搭建
使用文本编辑器来开发Node程序,最大的缺点是效率太低,运行Node程序还需要在命令行单独敲命令。如果还需要调试程序,就更加麻烦了。所以我们需要一个IDE集成开发环境,让我们能在一个环境里编码、运行、调试,这样就可以大大提升开发效率。Java的集成开发环境有Eclipse,Intellij idea等,C#的集成开发环境有Visual Studio,那么问题又来了:Node.js的集成开发环境到底哪家强?考察Node.js的集成开发环境,重点放在启动速度快,执行简单,调试方便这三点上。原创 2023-03-15 10:27:06 · 913 阅读 · 0 评论 -
CommonJS规范,深入了解模块原理
在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护。为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码就相对较少,很多编程语言都采用这种组织代码的方式。在Node环境中,一个.js文件就称之为一个模块(module)。原创 2023-03-16 10:22:47 · 360 阅读 · 0 评论