问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

Nodejs学习笔记(一)如何创建服务端

发布网友 发布时间:2022-04-26 11:30

我来回答

2个回答

懂视网 时间:2022-05-18 04:08

这第一篇就谈谈NodeJs的一些编程细节吧。

1、遍历数组



这样写的一个好处就是让每次循环少一步获取数组对象长度的操作,数组长度越长,价值越明显。

2、判断变量的真假



if条件判断的结果分别是:false, true, true, true。这个结果和PHP的结果是不同的,不要混淆。还需要区分它和非恒等判断相似的情况。

3、0值非恒等判断



其实还有很多这种诡异的判断,我只列出了较为常见的。如果想弄明白其中的规则,请参阅我的另一篇博文:【JavaScript】深入分析JavaScript的关系运算和if语句。

4、parseInt的陷阱



该语句执行后n值为8,而不是10。虽然很多人知道这一点,但是编程中难免会出错,我深有体会。所以,最好按下面的方式来写,就不会出错了。



5、变量在使用前一定要先声明

虽然,直接使用变量而不声明也不会出错,但是,这样写是很容易出错的。因为解释器会把它解释成全局变量,很容易和其他全局变量重名而导致出错。所以,一定要养成变量使用前要先声明的好习惯。

6、循环中存在异步的情况



你会发现,输出的结果都是相同的,而且是当i=arr.length-1时的输出内容。因为JavaScript是单线程的,它会先执行完整个循环的同步内容之后,才去执行其中的异步操作。代码中的匿名回调函数就是一个异步回调。执行到该函数的时候,for循环以及后面的一些同步操作都已经执行完毕。出于闭包原则,该函数会保留for循环的最后一次循环的sql变量和i变量的内容,所以才会导致错误的结果。

那怎么办呢?解决方法有两种,一种是使用立即函数,如下:



还有一种方法是将异步操作部分提取出来,单写一个函数,如下:




7 、在对大量数据作处理时,尽量避免循环嵌套。

因为循环嵌套的处理时间会随着数据量的增加成指数级增长,所以应尽量避免。遇到这种情况,如果没有更好的办法,一般采取的策略是以空间换时间,即建立一张二级循环数据的Hash映射表。当然,还要具体情况具体分析。还有一点要说的是,某些方法本身就是一个循环体,如Array.sort()(该方法应该是用了两层循环实现),在使用的时候需加注意。

8、尽量避免递归调用。

递归调用的优点是代码简洁,实现简单,而它的缺点很重要,说明如下:

(1)函数栈的大小会随着递归层次成线性增长,而函数栈是有上限值的,当递归达到一定层数后函数栈就会溢出,从而导致程序出错;

(2)每递归一层都会增加额外的压栈和出栈操作,即函数调用过程中的保存现场和恢复现场。

所以,应尽量避免递归调用。

9、关于模块文件的作用域隔离。

Node在编译JavaScript模块文件的时候,已经对其内容进行了头尾包装,如下:



从而使每个模块文件之间进行了作用域隔离。所以,当你编写NodeJs模块文件的时候,不需要自己再加一层作用域隔离封装了。如下面的代码格式,只会额外增加一层函数调用,是不推荐的:



10、数组和对象不要混用

下面是错误代码的示例:



数组和对象混用可能会导致不可预知的错误。我的一个同事就遇到过一个很奇怪的问题,先看代码:



他本以为对象o的name属性会在JSON串中,结果就是没有。当时我也很奇怪,但我有预感到是数组和对象混用的问题,试了一下,果然是它的问题。后来我在ECMA规范中查到,数组在序列化时是按JA规则进行的。所以,要养成一个好的编程习惯,正确使用数组和对象,不要混用。

11、promise优雅编程

相信接触过nodeJs的人都有过这样的体验,当异步回调里嵌套异步回调的时候,代码就显得很混乱,缺乏易读性。nodeJs的这一窘境可以借助promise来克服。promise就像一个雕琢器,让你的代码变得优雅、美观。promise有个A+规范,网上有几种实现方式,可以参阅。

热心网友 时间:2022-05-18 01:16

我使用的是 nodejs + Express 搭建的web服务器

具体操作如下:

nodejs + Express 搭建简单的web服务器

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
中控是什么意思 抖音直播中控是什么意思 iphone通讯录群组设置 如何更改iphone通讯录拨打电话时总是出现两个称呼 我的电脑是Win8.1update老硬盘有坏道,最近新买了一个硬盘是希捷的1TB混 ... 使命召唤:黑色行动2常见问题 GMA 4500M技术特性 电脑显示器的配置电脑的基本配置有哪些 梦见对象把门钥匙和我分手 梦见对象还我门钥匙要和我分手的预兆 公益性捐赠税前扣除资格 车子怎么保养? 推荐几款教育行业的在线客服机器人? 腾讯北京IM和百度机器学习岗,请问如何抉择? IAM即热饮水机的水箱里会滋生细菌吗? 哨子办公IM即时通讯有什么功能,请给下指南 100万用户同时在线IM通讯系统需要多大容量服务器?服务器配置 购买服务器 服务器容量 我的苹果机器IM:013036002334091,说是2011年产的,但不确定是否是翻新机还是水货,请帮忙解答 斯米拉的IM机器人 IAM破壁机值得买吗? 如果有明天祝福你亲爱的。是什么意思 如果还有明天是写给谁的 《如果还有明天》的全部歌词 有首歌的歌词是:如果还有明天,你要怎样装扮你的脸。这首歌叫什么? 国内十大知名品牌的化妆品是什么? 请问~ 如果还有明天 是谁唱的 ?歌词是什么啊?谁知道 关于“如果还有明天”的作文 如果还有明天歌词 请对“如果还有明天”这首歌的歌词进行赏析 求信/薛岳/柯有伦 《如果还有明天》完整歌词,包括那段RAP的歌词 如果还有明天为谁写的 vivo手机怎样在喵萌桌面开启宠物的小窝? 怎样有效地学习 Node.js? 喵萌桌面宠物可不可以提现到微信账号里? 汽车怎么启动步骤是啥? 咪萌桌面宠物,怎么开启通知权限 初学者如何学习nodejs 激萌猫咪桌面宠物怎么返回宠物就不见了 车子怎么保养啊 激萌猫咪桌面宠物怎么放两只宠物? 怎么学习nodejs websocket 如何关闭激萌猫咪桌面宠物VIP 怎么让激萌猫咪桌面宠物永远不消失vivo? 关于nodejs的几个问题求大神给讲解下(本人nodejs方面0 基础 ,JavaScript... oppo手机怎么把激萌猫咪设置宠物小窝? 车子怎么起步 为什么养猫? 学原生js是不是就是学会了node.js? 关于初音未来萌萌哒的QQ群等级头衔6个,从小到大排? 为什么男生喜欢养猫 猫咪为什么喜欢暗中观察?