Node.js 实战 第1章 欢迎进入Node.js 的世界 1.5 三种主流的Node 程序 1.6 总结

news2024/11/27 21:00:03

Node.js 实战

文章目录

      • Node.js 实战
      • 第1章 欢迎进入Node.js 的世界
        • 1.5 三种主流的Node 程序
          • 1.5.1 Web 应用程序
          • 1.5.2 命令行工具和后台程序
          • 1.5.3 桌面程序
          • 1.5.4 使用Node 的应用程序
        • 1.6 总结

第1章 欢迎进入Node.js 的世界

1.5 三种主流的Node 程序

Node 程序主要可以分成三种类型:

  • Web 应用程序【单页应用的简单程序、REST微服务、全栈的Web应用…】

  • 命令行工具和后台程序【Node写的命令行工具npm Gulp Webpack、后台程序就是后台服务,比如PM2进程管理器】

  • 桌面程序【一般是用Electron框架写的软件】

    Electron 用Node 作为基于Web 的桌面应用的后台,Atom 和Vscode 等文本编辑器都属于这一类

1.5.1 Web 应用程序

因为 Node是服务器端JavaScript平台,所以用它搭建Web应用程序是理所当然的事情。

既然客户端和服务器端用的都是JavaScript,代码难免会有在这两种环境里重用的机会。

Node Web一般使用Express 这样的框架写的。

举个栗子:

创建一个新目录,快速创建一个一个Express Web 应用程序

在这里插入图片描述

编写一个server.js 应用

const express = require('express');
const app = express();

app.get('/', (req, res) => {
    res.send('Hello world!');
});

app.listen(3000, () => {
    console.log('Express web app on localhost:3000');
});

输入npm start 命令,启动这个服务

在这里插入图片描述

使用浏览器访问对应的地址http://localhost:3000/

在这里插入图片描述

在前端开发的世界中,Node也在发挥着重要作用,因为它是进行语言转译的主要工具,比如从TypeScript到JavaScript。转译器将一种高级语言编译成另外一种高级语言,传统的编泽器则将一种高级语言编译成一种低级语言。

并不是所有的Web开发都会涉及Web应用的构建。有时候,在重建一个网站时,你需要把数据从老网站上扒出来。

1.5.2 命令行工具和后台程序

Node可以用来编写命令行工具,比如 JavaScript开发人员所用的进程管理器和JavaScript转译器。

它也可以作为一种方便的方式来编写其他操作的命令行工具,比如图片转换、控制媒体文件播放的脚本等。

举个栗子:

创建一个名为cli.js 的新文件,添加如下代码

const [nodePath, scriptPath, name] = process.argv;
console.log('Hello' , name);

使用node cli.js DingJiaxiong命令运行:

在这里插入图片描述

这里使用到了ES6中的解构,它会从process.argv 中拉取第三个参数。

所有Node 程序都可以访问process 对象,这是用户向程序传递参数的基础。

Node命令行程序还可以做其他事情。

如果在程序开头的地方加上#!,并赋予其执行许可( chmod +x cli.js ), shell就可以在调用程序时使用Node。

也就是说可以像运行其他 shell脚本那样运行Node程序。在类Unix系统中用下面这样的代码:

#!/usr/bin/env node

这样就可以使用Node 代替shell脚本,也就是说Node 可以和其他任何命名行工具配合,包括后台程序。Node 程序可以由cron 调用,也可以作为后台程序运行。

1.5.3 桌面程序

如果你用过 Atom或Visual Studio Code文本编辑器,那就用过Node。

Electron框架用Node做后台,所以只要需要访问硬盘或网络,Electron就会用到Node。Electron还用Node来管理依赖项,也就是说你可以用npm往 Electron项目里添加包。

我现在就想试一下!

复制Electron 的存储库并启动一个应用程序

git clone https://github.com/electron/electron-quick-start

cd .\electron-quick-start\

npm install

npm start

在这里插入图片描述

厉害了

这里npm install如果出现卡顿,请一定换成淘宝镜像,就会很快。

1.5.4 使用Node 的应用程序

看到这里,我们已经见识过了一些能用Node 搭建的应用程序了,其实Node 擅长的领域不止于此。

Node一般用来创建实时的Web应用,这几乎无所不包,从直接面对用户的聊天服务器到采集分析数据的后台程序都属于此类。

在JavaScript 中,函数是一等对象,Node又有内建的事件模型,所以用它来写异步实时程序比用其他脚本语言更自然。

如果要搭建传统的模型-视图-控制器(MVC )Web应用,用Node也很适合。

Ghost等一些流行的博客引擎就是用Node搭建的。在搭建这几种类型的Web应用程序方面,Node是一个经过实践检验的平台。虽然开发风格跟用PHP的 WordPress 不同,但Ghost支持的功能是类似的,包括模板和多用户管理区。

Node还能做一些用其他语言很难做到的事情。它是基于JavaScript的,所以在Node中能运行浏览器中的JavaScript。复杂的客户端应用可以经过改造在Node服务器上运行,让服务器进行预渲染,从而加快页面在浏览器中的渲染速度,也有利于搜索引擎进行索引。

最后,如果你想要搭建一个桌面端或移动端应用,建议试一下Electron,它也是由Node支撑起来的。

现在Web用户界面的体验跟桌面端应用一样丰富,Electron桌面端应用足以抗衡本地Web应用,还能缩短开发时间。Electron支持三种主流操作系统,所以你可以在Windows、Linux和 macOS上重用这些代码。

1.6 总结

  • Node是用来搭建JavaScript应用程序的平台,有基于事件和非阻塞的特性。
  • V8被用作JavaScript运行时。
  • libuv是提供快速、跨平台、非阻塞IO的本地库。
  • 被称为核心模块的 Node标准库很精巧,为JavaScript添加了磁盘I/O.
  • Node自带了一个调试器和一个依赖管理器(npm )。
  • Node可以用于搭建Web应用程序、命令行工具,甚至桌面程序。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

某网站视频播放花屏解密

某网站视频播放花屏解密样例网址:aHR0cHM6Ly90di5jY3R2LmNvbS8yMDIyLzA5LzMwL1ZJREVnZ0ZRYmZ6NmlMeXZjN0F4d0NlZjIyMDkzMC5zaHRtbA 站内之前也曾经发过相关的问题 1.CCTV视频m3u8视频下载,下载下来时长正确,有声音,但是画面是马…

聚沙成塔【45天玩转uni-app】初探uni-app

文章目录写在前面DCloud当下跨平台开发存在的问题为什么选择uni-app写在最后写在前面 聚沙成塔——每天进步一点点,大家好我是几何心凉,不难发现越来越多的前端招聘JD中都加入了uni-app 这一项,它也已经成为前端开发者不可或缺的一项技能了&…

ROS1可视化利器---Webviz

0. 简介 对于ROS1而言,rqt和plotjuggler是我们最常用的工具,这两个工具:rqt中嵌入了很多有用的小工具,但是它需要播放离线包,没有办法对离线包进行实时的分析。而plotjuggler支持对离线bag包进行分析,但是…

[C语言、C++]数据结构作业:用递归实现走迷宫(打印正确通路即可)

如果是非递归情况 如果当前点(方格)为出口,则成功退出 (否则) 如果可继续走(向相邻点试探),存在某个可前进 的相邻点(分支)则: 1、将当前点保存,以便回退 2、将相邻点作为当前点…

【数据结构】排序3——交换排序(冒泡排序、快速排序)

文章目录交换排序冒泡排序冒泡排序算法算法分析快速排序改进后的快速排序算法算法分析交换排序 【基本思想】 两两比较,如果发生逆序则交换,直到所有记录都排好序为止。 常见的交换排序方法: 冒泡排序T(n)O(n2) 快速排序T(n)O( nlog2n) 冒…

SpringSecurity Oauth2实战 - 06 获取用户登录信息并存储到本地线程

文章目录1. 获取用户登录信息1. 用户信息共享的ThreadLocal类 UserInfoShareHolder2. 写一个拦截器 UserInfoInterceptor3. 配置拦截器 CommonWebMvcAutoConfiguration2. 源码分析1. 认证用户通过access_token访问受限资源2. 进入过滤器 OAuth2AuthenticationProcessingFilter#…

源码分析:Transport 开发

有关 transport 相关队列的调用过程: 【T ransportService 】 TransportService.java 的所有接口由 DefaultTransportService.java 实现,里面包含四种接口: (1)发送到 ruleEngine 发送 TbProtoQueueMsg<ToRuleEngineMsg> 消息。 由 DefaultTbRuleEngineConsumerServic…

【攻破css系列——附加篇】vscode自动格式化

文章目录1. 快速格式化1.1 格式化的定义1.2 vscode的格式化组合键2. 自动格式化2.1 定义2.2 设置自动格式化的步骤1. 快速格式化 1.1 格式化的定义 格式化会让我们的代码正确缩进&#xff0c;同级标签的缩进空格一致&#xff0c;最后使我们代码更好看且易懂。 没有格式化我们…

Nginx学习

Nginx学习 nginx的基本概念 nginx是什么&#xff1f;做什么事情&#xff1f; Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器&#xff0c;特点是占用内存少&#xff0c;并发能力强&#xff0c;事实上nginx的并发能力确实在同类型的网页服务器中表现较好。nginx专为…

gcc编程4步编译、调试c程序实操详解(Linux系统编程)

gcc编译可以执行程序4步骤:预处理、编译、汇编、链接 一、知识储备&#xff08;想看实战往下翻&#xff09; 在linux程序种&#xff0c;c程序需要用gcc进行编译&#xff0c;链接用ld程序&#xff0c;ggc编译完成后可自动调用ld程序完成链接。 调用gcc程序的语法格式&#xff…

Android Studio APP开发入门之对话框Dialog的讲解及使用(附源码 包括提醒对话框,日期对话框,时间对话框)

运行有问题或需要源码请点赞关注收藏后评论区留言~~~ 一、提醒对话框 AlertDialog名为提醒对话框&#xff0c;它是Android中最常用的对话框&#xff0c;可以完成常见的交互操作&#xff0c;例如提示&#xff0c;确认&#xff0c;选择等功能&#xff0c;由于AlertDialog没有公开…

CLRNet: Cross Layer Refinement Network for Lane Detection——论文简述

一、简介 CLRNet充分利用了低层次特征和高层次特征&#xff0c;因为两者是互补的&#xff0c;先基于高层次特征侦测道路&#xff0c;再基于底层次特征进行调优&#xff1b;由于遮挡的存在&#xff0c;使用ROIGather进行全局信息的收集&#xff0c;在ROI道路特征和全局特征图之…

SaaS 架构基础理论(一)

SaaS架构基础理论1、背景2、SaaS商业模式2.1、什么是SaaS2.2、SaaS软件的优势&#xff1a;2.3、SaaS劣势&#xff1a;3.SaaS应用架构3.1、SaaS成熟度模型3.2、SaaS成熟模型分级3.2.1、Level1 定制开发3.2.2、Level2 可配置3.2.3、Level3 高性能的多租户架构3.2.4、Level4 可伸缩…

【Docker】Docker安装与入门

Docker入门与基础命令 Docker简介 Docker 是一个开源的应用容器引擎&#xff0c;让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中&#xff0c;然后发布到任何流行的 Linux或Windows操作系统的机器上&#xff0c;也可以实现虚拟化。容器是完全使用沙箱机制&#xf…

Zookeeper几种应用

分布式锁 master-worker模式 涉及三种角色&#xff1a; 1. master&#xff0c;用于检测新的task、worker的添加&#xff0c;将新的task分配给worker处理 2. worker&#xff0c;将自己注册到系统&#xff0c;被master发现后&#xff0c;监控task 3. client&#xff0c;客户…

ARM pwn 入门 (3)

由于网上的ARM pwn题很少很难找&#xff0c;因此这里拿ROP Emporium的8道题做练习&#xff0c;这个网站有包含x86-64、x86-32、MIPS、ARM共4种架构的elf文件可以做。 1. ret2win 注意&#xff1a;在执行需要动态链接库加载的ARM elf文件时&#xff0c;如果直接使用qemu-arm x…

(免费分享)基于javaweb,ssm旅游景点预定系统

源码获取&#xff1a;关注文末gongzhonghao&#xff0c;输入003领取下载链接 IDEA开发工具,数据库&#xff1a;mysql&#xff0c;Tomcat8 采用&#xff1a;springmvcspringmybatis框架 &#xff08;1&#xff09;用户信息管理模块 用户信息管理模块分为后台管理员信息的维护…

zlMediaKit 3 socket模块--怎么封装socket,怎么connect listen/bind write read

socket.cpp socket.h socket SockInfo类&#xff0c;有四个获取四元组信息的虚函数一个获取自身标识符的虚函数 shared_from_this 原理关于boost中enable_shared_from_this类的原理分析 - 阿玛尼迪迪 - 博客园 (cnblogs.com) shared_ptr<Tp> shared_from_this() { re…

RabbitMQ学习(一)

目录&#xff1a; &#xff08;1&#xff09;什么是消息队列 &#xff08;2&#xff09;为什么要使用消息队列 &#xff08;3&#xff09;RabbitMQ特点 &#xff08;4&#xff09;RabbitMQ的安装 &#xff08;5&#xff09;RabbitMQ常用命令 &#xff08;6&#xff09;Ra…

【HTML】标签简单融合运用

&#x1f60a;博主页面&#xff1a;鱿年年 &#x1f449;博主推荐专栏&#xff1a;《WEB前端》&#x1f448; ​&#x1f493;博主格言&#xff1a;追风赶月莫停留&#xff0c;平芜尽处是春山❤️ 一、目录文件夹 1.在vscode建立一个新的目录文件夹如15-综合案例 2.将imag…