目录
异步JavaScript:关键区别
构建测验应用程序示例
导航异步挑战
避免回调陷阱
超越简单回调:承诺和异步/等待
通过SQL连接优化
node.js apis和约定
服务器端的注意事项
结论
首页 web前端 css教程 将节点JavaScript与浏览器中的JavaScript进行比较

将节点JavaScript与浏览器中的JavaScript进行比较

Mar 14, 2025 am 09:37 AM

将节点JavaScript与浏览器中的JavaScript进行比较

对于前端开发人员,掌握Node.js仍然是一项宝贵技能。尽管Deno为服务器端JavaScript提供了替代方案,但Node.js的广泛生态系统确保其持续相关性。本文假设您熟悉基于浏览器的JavaScript,并希望使用node.js探索服务器端的开发。对于Node.js和NPM初学者,Jamie Corkhill在Smashing Magazine上的“入门”是一个很好的资源。

异步JavaScript:关键区别

浏览器JavaScript通常最少使用异步代码(例如, fetch API调用)。但是,Node.js几乎总是需要异步编程。它的单线读取事件循环依赖于异步回调,是其设计的基础。这种异步至上的方法对Node.js的成功至关重要,但它为那些习惯于同步编码的人提供了学习曲线。

构建测验应用程序示例

让我们构建一个简单的测验应用程序来说明node.js概念。 GitHub上提供了更完整的版本。该应用程序使用带有表格,问题和答案表的SQLite数据库。每个问题都有多个答案,其中只有一个是正确的。 Sqlite缺乏布尔类型;我们将0用于false,而为true 1。

首先,初始化NPM并安装sqlite3软件包:

 npm init -y
NPM安装sqlite3
登录后复制

"type":"module"添加到您的package.json以启用ES6模块。创建migrate.js来设置数据库表:

 // migrate.js
从“ sqlite3”导入sqlite3;

令db = new sqlite3.database(“ quiz.db”);
db.serialize(function(){
  // ...(数据库架构创建和初始数据插入)...
});
db.close();
登录后复制

该脚本可以创建表并使用示例数据填充它们。使用node migrate.js运行它。

导航异步挑战

让我们查询数据库。在index.js中,我们导入sqlite3 ,创建一个数据库对象,然后使用get函数:

 // index.js
从“ sqlite3”导入sqlite3;

令db = new sqlite3.database(“ quiz.db”);
db.get(``select * seal * where quizid = 0`,(err,row)=> {
  如果(err){
    Console.Error(err.message);
  }
  console.log(row);
  db.close();
});
登录后复制

这将测验数据打印到控制台。

避免回调陷阱

让我们创建一个函数getQuiz(id)以通过ID检索测验。仅由于异步执行而从回调中返回结果是不正确的:

 //不正确 - 避免这种情况!
功能getquiz(id){
  // ...(带回调的数据库查询)...
  返回结果; //结果将不确定!
}
登录后复制

正确的方法使用回调来处理异步结果:

函数getquiz(id,回调){
  // ...(数据库查询,用结果调用回调)...
}
getquiz(0,(quiz)=> {
  console.log(quiz);
});
登录后复制

超越简单回调:承诺和异步/等待

连锁多个异步电话会导致“回调地狱”。承诺提供更清洁的解决方案:

函数获取(params){
  // ...(数据库查询包裹在承诺中)...
}

获取({表:“答案”,列:“ andersId”,value:2})
  。然后(...)
  。然后(...)
  。然后(...)
  。抓住(...);
登录后复制

异步/等待进一步简化异步代码,使其类似于同步代码:

异步函数printquizfromanswer(){
  const答案=等待get({表:“答案”,列:“答案”,value:2});
  // ...(类似地等待随后的通话)...
}

printquizfromanswer();
登录后复制

顶级等待(最近的Node.js版本中可用)允许更简洁的代码。

通过SQL连接优化

为了提高效率,请使用SQL连接在单个查询中检索相关数据:

函数quizfromanswer(andersID,呼叫){
  // ...(SQL加入查询以获取答案,问题和测验数据)...
}
登录后复制

这减少了数据库调用的数量。

node.js apis和约定

Node.js引入了用于数据库交互,文件系统访问,HTTP服务器等的新API。了解Node.js约定,包括package.json文件和错误优先回调,至关重要。 COMPORJS模块和ES模块之间的差异也需要注意。

服务器端的注意事项

Node.js服务器端开发需要仔细处理异常和安全漏洞,与客户端JavaScript不同,错误通常会影响单个用户。

结论

Node.js使前端开发人员充分利用其JavaScript技能进行服务器端开发。尽管异步性质呈现出学习曲线,但并发和庞大的生态系统的好处使其成为强大的工具。请记住要熟悉异步JavaScript概念,Node.js API和安全性最佳实践。

以上是将节点JavaScript与浏览器中的JavaScript进行比较的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

VUE 3 VUE 3 Apr 02, 2025 pm 06:32 PM

它的出局!恭喜Vue团队完成了完成,我知道这是一项巨大的努力,而且很长时间。所有新文档也是如此。

使用Redwood.js和Fauna构建以太坊应用 使用Redwood.js和Fauna构建以太坊应用 Mar 28, 2025 am 09:18 AM

随着最近比特币价格超过20k美元的攀升,最近打破了3万美元,我认为值得深入研究创建以太坊

您可以从浏览器获得有效的CSS属性值吗? 您可以从浏览器获得有效的CSS属性值吗? Apr 02, 2025 pm 06:17 PM

我有人写了这个非常合法的问题。 Lea只是在博客上介绍了如何从浏览器中获得有效的CSS属性。那样的是这样。

带有粘性定位的堆叠卡和一点点的杂物 带有粘性定位的堆叠卡和一点点的杂物 Apr 03, 2025 am 10:30 AM

前几天,我发现了科里·金尼文(Corey Ginnivan)网站上的这一点,当您滚动时,彼此之间的卡片堆放集。

在CI/CD上有点 在CI/CD上有点 Apr 02, 2025 pm 06:21 PM

我说的“网站”比“移动应用程序”更合适,但我喜欢Max Lynch的框架:

比较浏览器的响应式设计 比较浏览器的响应式设计 Apr 02, 2025 pm 06:25 PM

这些桌面应用程序中有许多目标是同时在不同的维度上显示您的网站。因此,例如,您可以写作

在WordPress块编辑器中使用Markdown和本地化 在WordPress块编辑器中使用Markdown和本地化 Apr 02, 2025 am 04:27 AM

如果我们需要直接在WordPress编辑器中向用户显示文档,那么最佳方法是什么?

为什么Flex布局中的紫色斜线区域会被误认为是'溢出空间”? 为什么Flex布局中的紫色斜线区域会被误认为是'溢出空间”? Apr 05, 2025 pm 05:51 PM

关于Flex布局中紫色斜线区域的疑问在使用Flex布局时,你可能会遇到一些令人困惑的现象,比如在开发者工具(d...

See all articles