全国免费咨询:

0512-36676668

seo

X

企业中高端网站定制开发及推广服务商

与我们取得联系

0512-3667-6668     151 5162 3206

互联网品牌整合服务·为梦想者创造梦想品牌

十年定制化网站建设经验,我们是体验经济世界的构筑者 服务上千家企业

View More +

百度爱采购,B2B垂直搜索引擎

旨在帮助用户一站直达全网商品信息,触达海量优质商家

View More +

企业短视频推广

你还没有运营自己的企业/产品的账号?你不跟上时代,你就会被时代淘汰!

View More +

助力初创企业,拥抱新互联网+

创业初期,独创以服务为驱动的互联网公司,至今从未改变

View More +

优快推-为解决中小型企业的网站优化和百度搜索排名问题

自主开发的一站式互联网推广解决方案!

View More +

一直坚持,用品牌思维为客户打造真正有价值的推广

利用大数据,制定精准营销策略连接未来

View More +

一、Node.JS和Socket.io入门
使用Express创建您的第一个Node和Socket.io聊天应用程序。
要求
1.安装Node.JS和Git。
2.一点JavaScript经验。
创建应用
1.转到您的项目目录。
2.在此处打开终端并运行以下命令,
安装所有必需的模块
express:npminstallexpress--save
Socket.io:npminstallsocket.io--save
创建和部署基本的Express服务器

image.png

部署服务器
打开Chrome并导航到localhost:8080。
如果您看到以下信息:
通过服务器加载HTML文件
为简单起见,我没有使用Jade,EJS或任何ViewEngine。
现在,在根目录中创建一个名为Public的文件夹,并在其中创建一个名为index.html的文件。
现在让我们开始使用Socket.io
首先,我们必须在主服务器上启动Socket.io子服务器。
在server.js中:
更换:app.listen(port);
为:vario=require('socket.io').listen(app.listen(port));
这使Socket.io可以访问服务器,以便它可以将socket.io.js提供给public/index.html。
有关Socket.io的信息
为了实现与服务器和前端的实时快速通信,使用Socket.io,它将请求从客户端传递到服务器端。
在socket.io中,有两个脚本,一个在客户端运行,另一个在服务器端运行。两者相似,但是运行在不同的平台上。数据的传输通过由Socket.io内核中的函数触发的事件来处理。
在开始传输数据之前,客户端必须连接到构建在服务器顶部的Socket.io子服务器。当客户端连接到服务器时,'connection'将为在服务器上运行的Socket.io触发事件。
二、保持代码工整的7个小技巧
可读的代码是可维护的
在这篇短文中,我将介绍一些你可以用来改进你的代码的方法。本文代码示例均使用JavaScript。
我发现但凡是可读的代码必定是可维护的。
作为一名开发人员,我的目标是编写高质量的代码。团队中的每个开发人员,不管他/她的技术水平如何,都必须能够通过阅读理解我所写的代码。代码的可读性有助于年轻的开发人员编写代码时更加自信。
删除不必要的代码注释
当然,有些代码可以非常复杂。我深知这一点且见过很多次。在复杂的代码中,我会写些适当的文档和代码注释。
别误会。我不是代码注释或JavaScriptJSdoc的爱好者,而且基本上我能不用它们便不用。
我不需要任何注释来解释这个接收X个数组并将它们合并到一个新的数组中的函数。
functionmergeArrays(...arrays){letmergedArray=[]arrays.forEach(array=>{mergedArray=[...mergedArray,...array]})returnmergedArray}
像示例代码,如果增添文档并不能提高可读性。我希望团队成员知道展开操作符是什么。如果他们不清楚,他们应该在代码审查codereview时来问我。
当然,我们不要忘记注释的代码块。如果我们忘记了,这里只有一个解决方案:删除代码。既然了不起的git可以检出旧代码,那么为什么还要把它留在注释中呢?
请停止把你的代码库变成垃圾场。
重视命名

如果你看到函数名mergeArrays,就应该很清楚地知道这是一个将X个数组组合成一个新的数组的函数。我知道命名是件难事。函数越复杂,命名就越难…我有个法子让命名更容易,举个例子:有一个函数,它会合并两个数组并生成一个新的唯一的数字列表。观后感(https://www.yuananren.com/guanhougan/)你会怎么命名?是下面这样吗?functionmergeNumberListIntoUniqueList(listOne,listTwo){return[...newSet([...listOne,...listTwo])]}

mergeNumberListIntoUniqueList这个名字并没有那么糟糕,至少功能如其名。命名的难点在于这个函数要做两件事:一个函数做的事情越多,命名它就越困难。将这个函数拆分为两个单独的函数,命名会更容易且函数复用更容易。
functionmergeLists(listOne,listTwo){return[...listOne,...listTwo]}functioncreateUniqueList(list){return[...newSet(list)]}
当然,不需要调用新函数就可以很容易地创建美观的一行代码。但有时,一行代码的可读性并不高。
If语句
我对这个问题的命名无力…看!命名不易…
但我经常看到这种情况。
问题
if(value==='duck'||value==='dog'||value==='cat'){//...}
解决方法
constoptions=['duck','dog','cat'];if(options.includes(value)){//...}
这样做,你创建了一段像是英语句子般的可读代码。如果选项包含值,那么...
提前退出机制
这个准则有很多种命名方式,但我选择了“提前退出Earlyexit”这个名字。
让我给你们看一段代码。我相信你们以前见过这样的东西。
functionhandleEvent(event){if(event){consttarget=event.target;if(target){//Yourawesomepieceofcodethatusestarget}}}
来我们检查下对象event是否为真,以及属性target是否可用。问题是上面代码我们已经用了两个if语句。
让我们看看如何在这里实现“提前退出”。
functionhandleEvent(event){if(!event||!event.target){return;}//Yourawesomepieceofcodethatusestarget}
在这里用“提前退出”,你可以检查是否event和event.target同时非假。很明显,我们确信这一事件event.target非假。因为如果这个语句为假,程序就不会执行其他代码。
解构赋值
在JavaScript中,我们可以解构数据和对象。
根据developer.mozilla.org上的文档,解构赋值语法是一种JavaScript表达式。通过解构赋值,可以将值从数组、属性从对象中取出,赋值给其他变量。
一些代码示例
//Destructuringanobjectconstnumbers={one:1,two:2};const{one,two}=numbers;console.log(one);//1console.log(two);//2//Destructuringanarrayconstnumbers=[1,2,3,4,5];const[one,two]=numbers;console.log(one);//1console.log(two);//2
解构的问题在于,它有时会为属性创建一个不好的命名。最好的例子是从API获取数据并接收具有data属性的响应对象。
consturl="/api/v1/organizers/1"constresponse=awaitaxios.get(url)const{name}=response.data
这个代码示例说明你正在获取id为1的organizer。organizer对象有一个名字,你可以解构它。这样做没什么问题。
这段代码可以正常运行。但是为什么属性名还是name?那将是整个范围中唯一的name属性吗?属性名又来自哪个对象?
通过重命名属性可避免这些问题。
consturl="/api/v1/organizers/1"constresponse=awaitaxios.get(url)const{name:organizerName}=response.data
这段代码变得更具可读性。每个人都知道变量是organizer的名字。
童子军规则
听过这样一句话吗:“永远保持离开时的露营地比你发现它时更整洁”?
这就是童子军的规则。让代码比发现时更好。你发现代码异味codesmell?重构它!你发现一个未使用的变量?删除它!
我喜欢把童子军规则和打扫房间的情况进行类比。想象一下,你家里的每个人都把盘子放在水槽上,把所有垃圾都放在走廊上,把所有要洗的衣服都放在浴室里。但是每个星期天,你必须花费4个多小时清理整个房子。你会钟意吗?
我肯定答案是NO。所以如果每个人都立即清理房间的小部分,星期天的工作量会小一些。
代码库同理。如果每个小的代码异味codesmell都留在代码库中,没有人删除未使用的变量,linter就会抓狂且有大约77个warning。而且代码库将会有很多清洁工作要做,但是如果每个人都承担起自己的责任并遵守童子军法则,很多问题将会得到解决。
代码风格
同样重要的还有确定团队中的代码风格。
我不care你是喜欢单引号还是双引号,空格还是tab,结尾逗号还是不用。选择一种风格并坚持下去。你可以用Linter或者Prettier来做这件事。
有很多工具可以用来解决代码风格问题。我最钟意的是使用Husky预提交钩子。Prettier的文档中也有一个关于预提交钩子的页面。
这个预提交钩子总是在每次提交之前运行配置好的命令。如果你正确地配置它,它会运行得更漂亮,并对所有文件应用所有规则。这确保了团队总是拥有统一的代码风格,而没有任何糟糕的代码。
总结
我知道有些方法显而易见,有些则不是。但作为一名全职开发人员,我在不同的代码库上工作。这些规则的重要性只有在较大的代码库中才会突显。但这并不意味着你不应该将这些方法用在小项目中,提高你的代码质量让小项目更高效。它让团队成员方便地阅读你的代码并合并你的pull请求。正如我所说的,可读的代码更容易维护,当然可读的代码还有其他更多的好处。


上一篇:抓住人心的网页设计,用户体验很重要! 下一篇:网站SEO优化中如何做好网站的友情链接

相关阅读

猜您喜欢



不达标就退款

高性价比建站

免费网站代备案

1对1原创设计服务

7×24小时售后支持

 

了解我们

关于我们 联系我们

全国免费咨询:

0512-3667-6668



业务咨询:0512-3667 6668 / 185 5053 8088

节假值班:185 5053 8088

联系Q Q:2024691701  image.png

联系邮箱 :  youjiamikeji@163.com

官方网站 :  www.ujmkj.com

联系地址:江苏省苏州市昆山市玉山镇城南人民南路11688号昆城国贸

本网站信息为自动采集,如有侵权请联系删除! COPYRIGHT © 2015-2025 ujmkj.com All ights reserved. 江苏优加米信息科技有限公司      备案号:苏ICP备2020048694号-1    
安徽 福建 广东 广西 贵州 甘肃 海南 河南 黑龙江 湖北 湖南 河北 江苏 江西 吉林 辽宁 宁夏 内蒙古 青海 山东 山西 陕西 四川 西藏 新疆 云南 浙江 北京 天津 上海 重庆 合肥 安庆 蚌埠 亳州 巢湖 池州 滁州 阜阳 淮北 黄山 六安 马鞍山 宿州 铜陵 芜湖 宣城 福州 龙岩 南平 宁德 莆田 泉州 三明 厦门 漳州 广州 潮州 东莞 佛山 河源 惠州 江门 揭阳 韶关 深圳 阳江 云浮 湛江 肇庆 中山 珠海 南宁 百色 北海 崇左 防城港 桂林 贵港 河池 贺州 来宾 柳州 钦州 梧州 玉林 贵阳 安顺 毕节 六盘水 铜仁 兰州 白银 定西 嘉峪关 金昌 酒泉 临夏 陇南 平凉 庆阳 天水 武威 张掖 海口 儋州 琼海 三亚 郑州 安阳 鹤壁 焦作 开封 洛阳 漯河 南阳 平顶山 濮阳 三门峡 商丘 新乡 信阳 许昌 周口 驻马店 哈尔滨 大庆 大兴安岭 鹤岗 黑河 鸡西 佳木斯 牡丹江 七台河 齐齐哈尔 双鸭山 绥化 伊春 武汉 鄂州 恩施 黄冈 黄石 荆门 荆州 潜江 十堰 长沙 邵阳 石家庄 保定 沧州 承德 邯郸 衡水 廊坊 秦皇岛 唐山 邢台 张家口 南京 常州 淮安 连云港 南通 苏州 宿迁 泰州 无锡 徐州 盐城 扬州 镇江 南昌 抚州 西宁 临沂 青岛 长治 宝鸡 乌鲁木齐 哈密 和田 喀什 塔城 丽江 临沧 普洱 曲靖 昭通 文山 玉溪 杭州 湖州 嘉兴 金华 丽水 宁波 衢州 绍兴 台州 温州 舟山 香港 澳门 北京 天津 重庆 黄浦区 徐汇区 长宁区 静安区 普陀区 虹口区 杨浦区 浦东新区 闵行区 宝山区 嘉定区 金山区 松江区 青浦区 奉贤区 崇明区 昆山 张家港 太仓 常熟 玄武区 秦淮区 鼓楼区 建邺区 栖霞区 浦口区 江宁区 溧水区 高淳区 天宁区 钟楼区 新北区 武进区 金坛区 溧阳市 清江浦区 淮阴区 淮安区 洪泽区 涟水县 盱眙县 金湖县 海州区 连云区 赣榆区 灌云县 东海县 灌南县 崇川区 港闸区 通州区 海安县 如东县 如皋市 海门市 启东市 姑苏区 相城区 吴中区 虎丘区 吴江区 常熟 昆山 张家港 太仓 宿城区 宿豫区 沭阳 泗阳县 泗洪县 泰州市 海陵区 姜堰区 兴化市 泰兴市 靖江市 梁溪区 滨湖区 惠山区 锡山区 新吴区 江阴市 宜兴市 云龙区 鼓楼 泉山区 贾汪区 铜山区 新沂市 邳州市 睢宁县 沛县 丰县 亭湖区 盐都区 大丰区 东台市 建湖县 射阳县 阜宁县 滨海县 响水县 广陵区 邗江区 江都区 开发区 宝应县 仪征市 高邮市 京口区 润州区 丹徒区 镇江新区 镇江高新区 丹阳市 扬中市 句容市 拱墅区 上城区 下城区 江干区 西湖区 滨江区 萧山区 余杭区 富阳区 临安区 桐庐县 淳安县 建德市 吴兴区 南浔区 德清县 长兴县 安吉县 南湖区 秀洲区 嘉善县 海盐县 海宁市 平湖市 桐乡市 婺城区 金东区 兰溪市 义乌市 东阳市 永康市 浦江县 武义县 磐安县 莲都区 龙泉市 青田县 云和县 景宁畲族自治县 庆元县 缙云县 遂昌县 松阳县 海曙区 江北区 北仑区 镇海区 鄞州区 奉化区 余姚市 慈溪市 象山县 宁海县 柯城区 衢江区 龙游县 江山市 常山县 开化县 越城区 柯桥区 上虞区 新昌县 嵊州市 诸暨市 椒江区 黄岩区 路桥区 临海市 温岭市 玉环市 天台县 仙居县 三门县 鹿城区 龙湾区 瓯海区 洞头区 瑞安市 乐清市 永嘉县 平阳县 苍南县 文成县 泰顺县 定海区 普陀区 岱山县 嵊泗县