前端开发--node.js

Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行时环境,它使得 JavaScript 能够在服务器端运行,极大地扩展了 JavaScript 的应用范围。以下是关于 Node.js 的详细介绍:

特点

  • 事件驱动:Node.js 基于事件驱动架构,使用事件循环来处理并发操作。这意味着它可以高效地处理大量并发请求,而无需为每个请求创建新的线程,从而提高了性能和响应速度。
  • 非阻塞 I/O:Node.js 采用非阻塞 I/O 模型,允许在进行 I/O 操作时不会阻塞线程的执行。这使得应用程序能够在等待 I/O 操作完成的同时继续处理其他任务,大大提高了资源利用率和应用程序的整体性能。
  • 单线程:Node.js 在单线程上运行,但通过事件循环和异步操作来实现高并发。这种单线程的设计简化了编程模型,避免了多线程编程中常见的线程安全问题和锁机制。
  • 丰富的模块生态系统:Node.js 拥有庞大且活跃的社区,这使得它有一个丰富的模块生态系统。通过 npm(Node Package Manager),开发者可以轻松地获取和使用大量的开源模块,极大地提高了开发效率。

应用场景

  • Web 应用开发:可以用于构建各种类型的 Web 应用,包括服务器端逻辑、路由处理、中间件等。配合 Express、Koa 等框架,能够快速搭建功能强大的 Web 服务器。
  • 后端 API 服务:常用于构建 RESTful API 或其他类型的后端服务,为前端应用或移动应用提供数据支持和业务逻辑处理。
  • 实时应用:由于其事件驱动和非阻塞 I/O 的特性,非常适合开发实时应用,如聊天应用、在线游戏、实时监控系统等,能够高效地处理大量实时数据和用户交互。
  • 命令行工具:可以用来开发命令行工具,帮助开发者更高效地完成各种任务,如代码生成、自动化构建、测试工具等。
  • 物联网(IoT):在物联网领域,Node.js 可以用于与硬件设备进行交互,处理传感器数据,实现设备之间的通信和管理。

应用的实例

基于 Express 框架的简单博客应用

  • 功能描述
    • 实现用户注册登录功能,用户可以创建账号并登录系统。
    • 支持用户发布博客文章,包括文章标题、内容、发布时间等信息。
    • 可以对已发布的博客文章进行查看、编辑和删除操作。
  • 代码示例
const express = require('express');
const app = express();
const bodyParser = require('body-parser');
const mongoose = require('mongoose');
// 连接数据库
mongoose.connect('mongodb://localhost/blogapp', { useNewUrlParser: true, useUnifiedTopology: true });
// 定义用户模型
const userSchema = new mongoose.Schema({username: String,password: String
});
const User = mongoose.model('User', userSchema);
// 定义文章模型
const postSchema = new mongoose.Schema({title: String,content: String,date: { type: Date, default: Date.now }
});
const Post = mongoose.model('Post', postSchema);
app.use(bodyParser.urlencoded({ extended: true }));
// 注册页面
app.get('/register', (req, res) => {res.send('<form action="/register" method="post"><input type="text" name="username" placeholder="Username"><input type="password" name="password" placeholder="Password"><button type="submit">Register</button></form>');
});
app.post('/register', async (req, res) => {const newUser = new User({username: req.body.username,password: req.body.password});await newUser.save();res.redirect('/login');
});
// 登录页面
app.get('/login', (req, res) => {res.send('<form action="/login" method="post"><input type="text" name="username" placeholder="Username"><input type="password" name="password" placeholder="Password"><button type="submit">Login</button></form>');
});
app.post('/login', async (req, res) => {const user = await User.findOne({ username: req.body.username, password: req.body.password });if (user) {res.redirect('/posts');} else {res.send('Invalid username or password');}
});
// 文章列表页面
app.get('/posts', async (req, res) => {const posts = await Post.find();let html = '<h1>Blog Posts</h1>';posts.forEach(post => {html += `<h2>${post.title}</h2><p>${post.content}</p><p>Posted on ${post.date}</p><hr>`;});res.send(html);
});
// 发布文章页面
app.get('/posts/new', (req, res) => {res.send('<form action="/posts/new" method="post"><input type="text" name="title" placeholder="Title"><textarea name="content" placeholder="Content"></textarea><button type="submit">Publish</button></form>');
});
app.post('/posts/new', async (req, res) => {const newPost = new Post({title: req.body.title,content: req.body.content});await newPost.save();res.redirect('/posts');
});
const port = 3000;
app.listen(port, () => {console.log(`Server running on port ${port}`);
});

基于 Koa 框架的 API 服务器

  • 功能描述
    • 提供用户相关的 API 接口,包括获取用户列表、获取单个用户信息、创建新用户、更新用户信息和删除用户等操作。
    • 对请求进行参数验证和数据处理,返回相应的 JSON 数据格式。
  • 代码示例
const Koa = require('koa');
const app = new Koa();
const Router = require('koa-router');
const bodyParser = require('koa-bodyparser');
// 模拟数据库数据
let users = [{ id: 1, name: 'John Doe', email: 'john@example.com' },{ id: 2, name: 'Jane Smith', email: 'jane@example.com' }
];
app.use(bodyParser());
const router = new Router();
// 获取用户列表
router.get('/users', (ctx) => {ctx.body = users;
});
// 获取单个用户
router.get('/users/:id', (ctx) => {const id = parseInt(ctx.params.id);const user = users.find(u => u.id === id);if (user) {ctx.body = user;} else {ctx.status = 404;ctx.body = { message: 'User not found' };}
});
// 创建新用户
router.post('/users', (ctx) => {const newUser = {id: users.length + 1,name: ctx.request.body.name,email: ctx.request.body.email};users.push(newUser);ctx.body = newUser;
});
// 更新用户
router.put('/users/:id', (ctx) => {const id = parseInt(ctx.params.id);const user = users.find(u => u.id === id);if (user) {user.name = ctx.request.body.name;user.email = ctx.request.body.email;ctx.body = user;} else {ctx.status = 404;ctx.body = { message: 'User not found' };}
});
// 删除用户
router.delete('/users/:id', (ctx) => {const id = parseInt(ctx.params.id);users = users.filter(u => u.id!== id);ctx.body = { message: 'User deleted' };
});
app.use(router.routes()).use(router.allowedMethods());
const port = 3000;
app.listen(port, () => {console.log(`Server running on port ${port}`);
});

基于 Socket.io 的实时聊天应用

  • 功能描述
    • 实现多人实时聊天功能,用户可以在浏览器中打开聊天页面,输入用户名后进入聊天房间。
    • 支持发送文字消息,消息实时显示在聊天界面中,所有在线用户都能即时收到新消息。
  • 代码示例
    • 服务器端代码
const express = require('express');
const app = express();
const http = require('http').createServer(app);
const io = require('socket.io')(http);
app.use(express.static('public'));
io.on('connection', (socket) => {console.log('A user connected');socket.on('join', (username) => {socket.username = username;io.emit('message', { username: 'Server', message: `${username} joined the chat` });});socket.on('chat message', (msg) => {io.emit('message', { username: socket.username, message: msg });});socket.on('disconnect', () => {io.emit('message', { username: 'Server', message: `${socket.username} left the chat` });console.log('A user disconnected');});
});
const port = 3000;
http.listen(port, () => {console.log(`Server running on port ${port}`);
});
  • 客户端 HTML 代码(public/index.html)
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Chat App</title><style>body {font-family: Arial, sans-serif;}#chat-container {width: 400px;margin: 0 auto;border: 1px solid #ccc;padding: 10px;}#messages {height: 300px;overflow-y: scroll;border: 1px solid #ccc;padding: 5px;}#input-form {margin-top: 10px;}input[type="text"],input[type="submit"] {padding: 5px;}</style>
</head>
<body><div id="chat-container"><h1>Chat App</h1><div id="messages"></div><form id="input-form"><label for="username">Username:</label><input type="text" id="username"><br><label for="message">Message:</label><input type="text" id="message"><input type="submit" value="Send"></form></div><script src="/socket.io/socket.io.js"></script><script>const socket = io();const messagesDiv = document.getElementById('messages');const inputForm = document.getElementById('input-form');const usernameInput = document.getElementById('username');const messageInput = document.getElementById('message');inputForm.addEventListener('submit', (e) => {e.preventDefault();const username = usernameInput.value;const message = messageInput.value;if (username && message) {if (!socket.username) {socket.emit('join', username);socket.username = username;} else {socket.emit('chat message', message);}messageInput.value = '';}});socket.on('message', (data) => {const messageDiv = document.createElement('div');messageDiv.textContent = `${data.username}: ${data.message}`;messagesDiv.appendChild(messageDiv);});</script>
</body>
</html>

优势

  • 前后端技术统一: 对于前端开发者来说,使用 Node.js 可以让他们在后端开发中继续使用熟悉的 JavaScript 语言,实现前后端技术栈的统一,降低了学习成本,提高了开发效率。
  • 高效的性能: 通过事件驱动和非阻塞 I/O 模型,Node.js 能够处理大量并发请求,具有出色的性能和响应速度,适用于构建高性能的应用程序。
  • 社区支持强大: 庞大的社区意味着有大量的开源库、框架和资源可供使用,开发者可以轻松地找到解决问题的方案,同时也能够方便地分享自己的代码和经验。
  • 易于部署: Node.js 应用通常可以很容易地部署到各种服务器环境中,并且可以通过容器化技术(如 Docker)进一步简化部署过程,提高应用的可移植性和稳定性。

局限性

  • CPU 密集型任务受限: 由于单线程的特性,Node.js 在处理 CPU 密集型任务时性能相对较低,因为它无法充分利用多核 CPU 的优势。在这种情况下,可能需要考虑使用其他语言或技术来实现。
  • 异步编程复杂性: 虽然异步编程是 Node.js 的核心特性,但过多的异步操作可能导致代码逻辑复杂,难以理解和维护。需要开发者具备良好的异步编程思维和技巧,以避免回调地狱等问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/25326.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CST的UAV无人机RCS --- A求解器 - 一维距离像(HRRP)和正弦图(Sinogram)

“高分辨距离像(HRRP&#xff0c;high resolution range profile)是用宽带雷达信号获取的目标散射点复子回波在雷达射线上投影的向量和&#xff0c;它提供了目标散射点沿距离方向的分布信息,其特点是通过发出某一波长的高频信号&#xff0c;通过反射成像时间和位置&#xff0c;…

centos 7 安装python3 及pycharm远程连接方法

安装openssl及python3 cd /tmp #将python3.11.11的安装包下载/tmp目录下 ​ #将python3.11.11的安装包下载/tmp目录下 ​cd /tmp #下载最新的软件安装包 wget https://www.python.org/ftp/python/3.11.11/Python-3.11.11.tgz#安装源码编译需要的编译环境 yum -y install gcc z…

smolagents学习笔记系列(番外一)使用DeepSeek API Key + CodeAgent

这篇文章是在 smolagents 官方教程结束后的番外篇&#xff0c;实现了如何使用 DeepSeek API Key CodeAgent 执行你的提示词。 之所以写这篇文章是因为 smolagents 没有提供 DeepSeek 的模型接口&#xff0c;尽管可以通过 HfApiModel 这个类来指定使用与 DeepSeek 相关的模型&…

20250227使用mount命令挂载飞凌OK3588-C的linux R4的文件系统rootfs.img以备修改

rootrootrootroot-X99-Turbo:~/version/OK3588_Linux_fs/linuxfs$ mv m2/ R4 rootrootrootroot-X99-Turbo:~/version/OK3588_Linux_fs/linuxfs$ sudo mount rootfs.img R4/ rootrootrootroot-X99-Turbo:~/version/OK3588_Linux_fs/linuxfs$ sudo umount R4 20250227使用mount命…

【前端基础】Day 1 HTML

总结&#xff1a; 1. Web标准的构成 2. 基本标签 目录 1. Web标准的构成 2. 基本标签 2.1快捷键 2.2.1标题标签 2.2.2段落和换行标签 2.2.3文本格式化标签 2.2.4div和span标签 2.3.1 图像标签和路径 2.3.2路径 2.3.3超链接标签 2.4注释标签 2.5特殊字符 1. Web标准…

推荐3个背景渐变色的wordpress主题

干净、清爽、背景渐变色的wordpress企业主题 ​ 服务类公司wordpress企业主题https://www.jianzhanpress.com/?p8255 红色大气的wordpress企业主题&#xff0c;适合服务行业的公司搭建企业官方网站使用。 ​ wordpress询盘型独立站主题https://www.jianzhanpress.com/?p8258…

LlamaFactory-webui:训练大语言模型的入门级教程

LlamaFactory是一个开源框架&#xff0c;支持多种流行的语言模型&#xff0c;及多种微调技术&#xff0c;同时&#xff0c;以友好的交互式界面&#xff0c;简化了大语言模型的学习。 本章内容&#xff0c;从如何拉取&#xff0c;我已经搭建好的Llamafactory镜像开始&#xff0…

微信小程序-二维码绘制

wxml <view bindlongtap"saveQrcode"><!-- 二维码 --><view style"position: absolute;background-color: #FFFAEC;width: 100%;height: 100vh;"><canvas canvas-id"myQrcode" style"width: 200px; height: 200px;ba…

Python—Excel全字段转json文件(极速版+GUI界面打包)

目录 专栏导读1、背景介绍2、库的安装3、核心代码4、完整代码(简易版)5、进阶版(GUI)总结专栏导读 🌸 欢迎来到Python办公自动化专栏—Python处理办公问题,解放您的双手 🏳️‍🌈 博客主页:请点击——> 一晌小贪欢的博客主页求关注 👍 该系列文章专栏:请点击——…

游戏引擎学习第124天

仓库:https://gitee.com/mrxiao_com/2d_game_3 回顾/复习 今天是继续完善和调试多线程的任务队列。之前的几天&#xff0c;我们已经介绍了多线程的一些基础知识&#xff0c;包括如何创建工作队列以及如何在线程中处理任务。今天&#xff0c;重点是解决那些我们之前没有注意到…

Sqlserver安全篇之_启用TLS即配置SQL Server 数据库引擎以加密连接

官方文档 https://learn.microsoft.com/zh-cn/sql/database-engine/configure-windows/configure-sql-server-encryption?viewsql-server-ver16 https://learn.microsoft.com/zh-cn/sql/database-engine/configure-windows/manage-certificates?viewsql-server-ver15&pre…

hbase笔记总结1

hbase是nosql的一种&#xff0c;非关系型数据库&#xff0c;not only sql&#xff0c;可处理大规模、高并发的数据&#xff0c;是web2.0以后的产物hbase的扩展性和灵活性更好&#xff0c;而且筛选能力相较于MySQL更优nosql的四大特点&#xff1a; 灵活的数据模型 &#xff08;1…

RabbitMq高级

目录 1.发送者的可靠性 1.1 .生产者重试机制 1.2.生产者确认机制 1.3.实现生产者确认 1.3.1.开启生产者确认 1.3.2.定义ReturnCallback 1.3.3.定义ConfirmCallback 2.MQ的可靠性 2.1.数据持久化 2.1.1.交换机持久化 2.1.2.队列持久化 2.1.3.消息持久化 2.2.LazyQueu…

kafka-web管理工具cmak

一. 背景&#xff1a; 日常运维工作中&#xff0c;采用cli的方式进行kafka集群的管理&#xff0c;还是比较繁琐的(指令复杂&#xff1f;)。为方便管理&#xff0c;可以选择一些开源的webui工具。 推荐使用cmak。 二. 关于cmak&#xff1a; cmak是 Yahoo 贡献的一款强大的 Apac…

Android应用app实现AI电话机器人接打电话

Android应用app实现AI电话机器人接打电话 --安卓AI电话机器人 一、前言 【Dialer3.0智能拨号器】Android版手机app&#xff0c;由于采用蓝牙电话的方式来调用手机SIM卡发起呼叫、接听来电&#xff0c;并接收和处理通话的声音&#xff0c;通常我们以“蓝牙电话方案”来称呼它。 …

docker简介-学习与参考

docker Docker 是一个开源的应用容器引擎&#xff0c;基于 Go 语言并遵从 Apache2.0 协议开源。 Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中&#xff0c;然后发布到任何流行的 Linux 机器上&#xff0c;也可以实现虚拟化。 容器是完全使用沙箱…

【leetcode hot 100 42】接雨水

错误解法&#xff1a;若height[left]>height[right]则代表有坑 class Solution {public int trap(int[] height) {int left 0;int area 0;while(left<height.length-1){// 找坑int right left1;while(right<height.length-1 && height[left]>height[ri…

Octave3D 关卡设计插件

课程参考链接 这位大佬有在视频合集中有详细的讲解&#xff0c;个人体验过&#xff0c;感觉功能很强大 https://www.bilibili.com/video/BV1Kq4y1C72P/?share_sourcecopy_web&vd_source0a41d8122353e3e841ae0a39908c2181 Prefab资源管理 第一步 在场景中创建一个空物体…

llama.cpp 一键运行本地大模型 - Windows

文章目录 llama.cpp 一键运行本地大模型 - Windows嘿&#xff0c;咱来唠唠 llama.cpp 这玩意儿&#xff01;gguf 格式是啥&#xff1f;咱得好好说道说道基座模型咋选&#xff1f;所需物料&#xff0c;咱得准备齐全咯核心命令&#xff0c;得记牢啦运行方式咋选&#xff1f;测试应…

SQLark 数据迁移|断点续迁已上线(Oracle-达梦)

数据迁移是 SQLark 最受企业和个人用户欢迎的功能之一&#xff0c;截止目前已帮助政府、金融、能源、通信等 50 家单位完成从 Oracle、MySQL 到达梦的全量迁移&#xff0c;自动化迁移成功率达 96% 以上。 在 Oracle 到达梦数据库迁移过程中&#xff0c;SQLark V3.3 新增 断点续…