扛着锄头写代码之vuejs和nodejs搞起web app系列

简介: 上次为了vue.js实现web app看的nodejs,首先感谢上次各位大神对nodejs初识不足的指点。本次烟纠了个小小的Demo,来总结和提疑。

次为了vue.js实现web app看的nodejs,首先感谢上次各位大神对nodejs初识不足的指点。本次烟纠了个小小的Demo,来总结和提疑。

Demo主要使用nodejs搭的websocket服务,vuejs实现的客户端功能,凑上HTML5 (听说H5这个必须这样写完整才专业,而且5前面不要空格)的canvas实现的“简易你画我猜 ”Web APP。

关于VUE:

nodejs和vue并没有直接关系,vue是前端框架,算是js的三大框架之一吧,node是后端开发语言,同php、java、c#一样的。但是他们可以配合使用。然而这句话是不准确的,想想为什么呢?每个vue项目都要安装node吗?答案:vue项目需要安装node,vue真正指向的是@vue/cli项目下的vue.js文件,所以我们在执行vue指令时,实际是通过node.js运行vue.js文件,所以必须安装node.js。
image.png

其实vue的模块化语法要基于node


image.png

演示如下:
image.png

入口界面


image.png

客户端(左画端,右猜端,画布同步显示图像)

(题外话:原本想部署到线上免费服务heroku给大家画画,可惜一个tool下载不来,oschina的免费服务也已经挂掉了,形同虚设,无奈。晚点看看使用测试服务主机部上去后更新在这里。访问地址:http://xxxx你M啊免费的服务都是搞假的.com:8081)

欲实现多个房间的“你画我猜”互相不受干扰的功能时,遇到诸多疑惑。

一步一步来,

1.首先安装nodejs(不赘述),安装需要的服务(本次直接使用了代码包:https://github.com/lh16/jianyiwohuanicai.git)。

2.APP项目目录:

(1) ws-server.js服务代码,使用websocket,这里主要是ws的使用,仅贴主要代码(详见码包),

//向客户端(猜词)响应

ws.on('message', function(message) {

//console.log(ws.clients.query)

console.log('received: %s', message)

if(0){

console.log('no port')//非当前端口

}

else{

console.log(message)

console.log(keyWord)

if (message == keyWord) {//猜词画布数据

console.log('correct')

wss.clients.forEach((client) => {//客户端响应

client.send('ok')

})

} else {

console.log('wrong')

wss.clients.forEach((client) => {

client.send(message)

})

}

}

})

疑问:ws响应针对所有的客户端请求,如何指定ID只向指定ID的客户端响应?

(2) nodejs 搭建的服务器代码server.js.

new WebpackDevServer(webpack(config), {

publicPath: config.output.publicPath,

hot: true,

historyApiFallback: true

}).listen(8081, 'localhost', function (err) {

if (err) {

console.log(err);

}

console.log('Listening at localhost:8081');

});

(3) APP代码,这里才是VUE知识。

index.js入口,App.vue母板,darwing-board.vue画布组件,showing--board.vue猜词组件。

一段关于VUE组件主要代码:

import Vue from 'vue'

import DrawingBoard from './components/drawing-board.vue'

import showingBoard from './components/showing-board.vue'

export default {

data() {

return {

player: 0,

data_id: 0

}

},

components: {

DrawingBoard,

showingBoard

},

methods: {

draw(event) {

this.data_id = event.currentTarget.id,

document.getElementById('dv').setAttribute('data_value',this.data_id),

this.player = (this.data_id == 1 ? 1:this.data_id+'.1')

},

guess(event) {

this.data_id = event.currentTarget.id,

document.getElementById('dv').setAttribute('data_value',this.data_id),

this.player = (this.data_id == 1 ? 2:this.data_id+'.2')

},

replay(event) {

this.data_id = event.currentTarget.id,

document.getElementById('dv').setAttribute('data_value',this.data_id),

this.player = 0

location.reload()

}

}

}

... ...

通过click事件监听和player值的变化显示不同的界面组件(画布或者猜词),这对于开发Web APP再友好不过了。页面通过实时获取坐标值并通过ws实时请求并同步响应到猜词客户端达到图像的同步。(想像下聊天室功能可能会更直观)

疑问:当前这种模式下的组件包含实现如何让父组件(App.vue)传递组件的id或者传值到子组件(showing-board.vue)?尝试了用DIV属性的方式实现不同层级之间的传值可以实现但是ws是不支持URL传参的,导致请求与服务之间无法识别id标识。

3.运行

项目部署编写完毕,cmd客户端cd进入项目目录 执行命令

node ws-server.js// 开启ws服务器

image.png

npm run dev// 运行客户端

image.png

然后浏览器可访问:http://127.0.0.1:8081/

后记:初步对vuejs和nodejs有所认识,对于目前文中提到的学习过程中相关疑问还未得到清晰的答案,有待研究,期待大神。

参考资源:

vuejs手册: http://cn.vuejs.org/guide/index.html

源demo: https://github.com/jrainlau/draw-something

相关文章
|
9天前
|
JavaScript 前端开发 开发者
Vue3:快速生成模板代码
Vue3:快速生成模板代码
|
2月前
|
JavaScript
Vue3代码展示(vue-codemirror)
`vue-codemirror`插件为Vue应用提供了一个强大的代码编辑器组件,支持代码高亮、自定义样式、暗黑模式等特性。通过简单的配置即可实现丰富的代码编辑体验。安装依赖后,创建`CodeMirror.vue`组件并在目标页面中使用即可。
189 1
Vue3代码展示(vue-codemirror)
|
23天前
|
XML JSON 安全
Web安全-代码注入
Web安全-代码注入
18 6
|
2月前
|
中间件 API 开发者
Bottle框架探秘:如何用几行代码搅动Web开发江湖?
【8月更文挑战第31天】Bottle是一个仅依赖Python标准库的轻量级Web开发微框架,无需额外依赖,简化部署与维护。它以简洁高效著称,适合快速构建Web应用。通过简单的示例即可上手,如用几行代码实现“Hello World”应用。除基础功能外,Bottle还支持模板渲染、会话管理和表单处理等,适用于学习及小型项目,也能在高性能要求的应用中展现价值。无论是新手还是有经验的开发者,Bottle都是高效Web开发的理想选择。
33 1
|
2月前
|
Android开发 iOS开发 C#
Xamarin:用C#打造跨平台移动应用的终极利器——从零开始构建你的第一个iOS与Android通用App,体验前所未有的高效与便捷开发之旅
【8月更文挑战第31天】Xamarin 是一个强大的框架,允许开发者使用单一的 C# 代码库构建高性能的原生移动应用,支持 iOS、Android 和 Windows 平台。作为微软的一部分,Xamarin 充分利用了 .NET 框架的强大功能,提供了丰富的 API 和工具集,简化了跨平台移动应用开发。本文通过一个简单的示例应用介绍了如何使用 Xamarin.Forms 快速创建跨平台应用,包括设置开发环境、定义用户界面和实现按钮点击事件处理逻辑。这个示例展示了 Xamarin.Forms 的基本功能,帮助开发者提高开发效率并实现一致的用户体验。
76 0
|
2月前
|
数据库 开发者 Java
数据战争:Hibernate的乐观与悲观锁之争,谁将主宰并发控制的王座?
【8月更文挑战第31天】在软件开发中,数据一致性至关重要,尤其是在多用户并发访问环境下。Hibernate 作为 Java 社区常用的 ORM 框架,提供了乐观锁和悲观锁机制来处理并发问题。乐观锁假设数据不易冲突,通过版本号字段 (`@Version`) 实现;悲观锁则假定数据易冲突,在读取时即加锁。选择哪种锁取决于具体场景:乐观锁适合读多写少的情况,减少锁开销;悲观锁适合写操作频繁的场景,避免数据冲突。正确应用这些机制可提升应用程序的健壮性和效率。
28 0
|
2月前
|
Java UED 自然语言处理
Struts 2 国际化竟有如此神奇魔力?快来揭开多语言支持的 Web 应用神秘面纱
【8月更文挑战第31天】在全球化背景下,Web应用需适应多种语言环境。Struts 2凭借其强大的国际化(i18n)支持,简化了多语言应用开发。通过不同语言的资源文件,它能自动匹配用户语言偏好,优化用户体验并扩展用户群。下面是一个示例:创建`messages.properties`(英语)与`messages_zh_CN.properties`(中文),并在Struts 2的Action类及JSP页面中调用`getText()`方法及Struts标签展示相应语言内容。此外,在struts.xml中指定资源文件,以确保框架正确加载对应语言包。通过这些步骤,开发者可以轻松实现应用的多语言支持。
51 0
|
2月前
|
Java 开发者 JavaScript
Struts 2 开发者的秘籍:隐藏的表单标签库功能,能否成为你下个项目的大杀器?
【8月更文挑战第31天】Struts 2表单标签库是提升Web页面交互体验的神器。它提供丰富的标签,如`<s:textfield>`和`<s:select>`,简化表单元素创建与管理,支持数据验证和动态选项展示。结合示例代码,如创建文本输入框并与Action类属性绑定,显著提升开发效率和用户体验。通过自定义按钮样式等功能,Struts 2表单标签库让开发者更专注于业务逻辑实现。
40 0
|
2月前
|
iOS开发 Android开发 MacOS
从零到全能开发者:解锁Uno Platform,一键跨越多平台应用开发的神奇之旅,让你的代码飞遍Windows、iOS、Android、macOS及Web,技术小白也能秒变跨平台大神!
【8月更文挑战第31天】从零开始,踏上使用Uno Platform开发跨平台应用的旅程。只需编写一次代码,即可轻松部署到Windows、iOS、macOS、Android及Web(通过WASM)等多个平台。Uno Platform为.NET生态带来前所未有的灵活性和效率,简化跨平台开发。首先确保安装了Visual Studio或VS Code及.NET SDK,然后选择合适的项目模板创建新项目。项目结构类似传统.NET MAUI或WPF项目,包含核心NuGet包。通过简单的按钮示例,你可以快速上手并构建应用。Uno Platform让你的技术探索之旅充满无限可能。
37 0
|
2月前
|
前端开发 开发者 Apache
揭秘Apache Wicket项目结构:如何打造Web应用的钢铁长城,告别混乱代码!
【8月更文挑战第31天】Apache Wicket凭借其组件化设计深受Java Web开发者青睐。本文详细解析了Wicket项目结构,帮助你构建可维护的大型Web应用。通过示例展示了如何使用Maven管理依赖,并组织页面、组件及业务逻辑,确保代码清晰易懂。Wicket提供的页面继承、组件重用等功能进一步增强了项目的可维护性和扩展性。掌握这些技巧,能够显著提升开发效率,构建更稳定的Web应用。
76 0
下一篇
无影云桌面