对于前端开发人员,掌握Node.js仍然是一项宝贵技能。尽管Deno为服务器端JavaScript提供了替代方案,但Node.js的广泛生态系统确保其持续相关性。本文假设您熟悉基于浏览器的JavaScript,并希望使用node.js探索服务器端的开发。对于Node.js和NPM初学者,Jamie Corkhill在Smashing Magazine上的“入门”是一个很好的资源。
浏览器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连接在单个查询中检索相关数据:
函数quizfromanswer(andersID,呼叫){ // ...(SQL加入查询以获取答案,问题和测验数据)... }
这减少了数据库调用的数量。
Node.js引入了用于数据库交互,文件系统访问,HTTP服务器等的新API。了解Node.js约定,包括package.json
文件和错误优先回调,至关重要。 COMPORJS模块和ES模块之间的差异也需要注意。
Node.js服务器端开发需要仔细处理异常和安全漏洞,与客户端JavaScript不同,错误通常会影响单个用户。
Node.js使前端开发人员充分利用其JavaScript技能进行服务器端开发。尽管异步性质呈现出学习曲线,但并发和庞大的生态系统的好处使其成为强大的工具。请记住要熟悉异步JavaScript概念,Node.js API和安全性最佳实践。
以上是将节点JavaScript与浏览器中的JavaScript进行比较的详细内容。更多信息请关注PHP中文网其他相关文章!