node.js 10 Web框架Express 介绍,安装,静态页面,路由
ccwgpt 2024-09-23 04:34 31 浏览 0 评论
上一篇: node.js 09 MongoDB增删改查,聚合,连接池
前面介绍了node.js的文件模块,http server以及静态网站的创建。有了这些知识作为基础,我们可以了解一下node.js的Web框架了。
从Java一路过来的朋友可能觉得Web框架还是比较重量级的,比如最初的Struts到后来的Spring,中间Apache组织也有过一些其他的模板框架,总体而言无论是从使用还是学习来讲,都是需要花费较多时间的。对于大型应用而言,这个投入是值得的。如果需要在较短的时间开发小型web应用,就值得商榷了。
好在有了node.js的出现,出现了像Express这样的轻量级,灵活的web框架,中小型web应用的开发速度就有了飞速的提升。
node.js Web框架
Java的世界里,Spring的使用目前处于绝对优势。但是其他语言就不一样了,无论node.js还是python,都有多个web应用框架。尤其是node.js,web框架较多,业界甚至评出了10大node.js web框架。不过不要惊慌,万变不离其宗,很多node.js web框架都是在Express的基础上开发的。这也是为什么在我的node.js系列里一定会出现node.js。最近炙手可热的框架koa也是之前Express的一帮开发人员后来做的,后面我也会专门写一篇介绍Koa。
之所以介绍Express,一是因为很多node.js框架都是在Express基础上的,另一个原因是Express非常轻便,上手很快,快到做一个CRUD的时间可以缩短到几个小时或者更短。这让我想起若干年前,我在使用Java Blueprint EJB做一个CRUD用了大约2天时间,包括了服务器的配置,在不同的web server上调试。然而node.js不需要这些,因为http server 以及Application server都是程序员自己用node.js代码写的。从另一个层面来讲,真正的大型企业级应用,我个人不推荐node.js。小型轻量级应用,node.js是首选。
Express JS
Github上收获了47.7k个星,目前来看是下载量最多的node.js框架。我之前介绍的node.js博客系统Ghost使用的web框架就是Express。
通过Express可以提供静态网站服务,路由,中间件,以及与模板引擎配合使用。
Express JS安装运行
安装通过npm进行。
- 安装express "npm install express --save"
D:\Projects\nodejs\NodeDemo\forms>npm install express --save
npm WARN forms@1.0.0 No description
npm WARN forms@1.0.0 No repository field.
+ express@4.17.1
added 50 packages from 37 contributors and audited 127 packages in 11.149s
found 0 vulnerabilities
- 在第一步完成后,express就已经在本地安装完成。但是没办法像create-react-app那样创建程序框架。好在express有一个程序生成器,express-generator。通过命令"npm install express-generator -g"即可安装。
D:\Projects\nodejs\NodeDemo\forms>npm install -g express-generator
D:\Program Files\nodejs\node_global\express -> D:\Program Files\nodejs\node_global\node_modules\express-generator\bin\express-cli.js
+ express-generator@4.16.1
added 10 packages from 13 contributors in 6.346s
- 运行"express"命令创建项目文件
由于我们已经建好了forms项目目录,所以直接运行express就可以在目录下创建项目文件和子目录。如果项目目录没有创建号,可以运行"express <project>"。该命令会自动创建<project>目录,并在目录下创建相关子目录和文件。
D:\Projects\nodejs\NodeDemo\forms>express
warning: the default view engine will not be jade in future releases
warning: use `--view=jade' or `--help' for additional options
destination is not empty, continue? [y/N] y
create : public\
create : public\javascripts\
create : public\images\
create : public\stylesheets\
create : public\stylesheets\style.css
create : routes\
create : routes\index.js
create : routes\users.js
create : views\
create : views\error.jade
create : views\index.jade
create : views\layout.jade
create : app.js
create : package.json
create : bin\
create : bin\www
install dependencies:
> npm install
run the app:
> SET DEBUG=node10:* & npm start
注意我们在运行时,系统有提示“destination is not empty, continue? [y/N]”,直接输入"y"就好。这是因为我们在forms目录下创建,并且该目录下已有部分通过"npm -i"创建的项目文件。
- 运行"npm install"安装express相关依赖包
D:\Projects\nodejs\NodeDemo\forms>npm install
added 4 packages from 3 contributors, removed 2 packages, updated 16 packages and audited 141 packages in 12.091s
found 0 vulnerabilities
- 运行项目"npm start"
D:\Projects\nodejs\NodeDemo\forms>npm start
> forms@0.0.0 start D:\Projects\nodejs\NodeDemo\forms
> node ./bin/www
GET / 200 17.703 ms - 207
GET /stylesheets/style.css 200 5.473 ms - 111
此时,打开自己的浏览器,访问http://localhos:3000/即可显示express创建的项目的主页。
ExpressJS 静态页面处理
使用框架有一个好处,那就是很多底层的处理不需要自己通过代码一行一行敲,框架的价值在于可以提供很多封装好的接口。
在静态页面的处理上,我们不需要在通过fs模块读取文件,通过response返回给客户端。在express中,只需要调用response.render()方法,传入模板文件名称即可。
示例代码:<project>/routes/index.js
//引入express
var express = require('express');
var router = express.Router();
/* 获取静态页面 */
router.get('/', function(req, res, next) {
res.render('index', { title: 'Express' });
});
//导出抹开
module.exports = router;
上面的代码从express创建的项目的代码中抽取,可以看到返回静态页面只需要引入express模块,调用路由Router,然后通过get方法,调用response.render()读取到index模板文件,将该静态模板文件返回客户端即可。注意,在这里有一个{title:'Express'}是模板中的参数,我们后面会介绍。
短短数行代码,没有绕人的逻辑,静态页面处理就完成了。
ExpressJS 路由
在上面的静态页面处理过程中,我们已经使用了路由Router。路由的具体使用方法如下:
- 在入口文件app.js中引入实际处理的路由。比如我们实际处理静态页面index的路由是<project>/routes/index.js, 那么在app.js中我们可以通过下列代码引入index 路由router
var indexRouter = require('./routes/index');
- 设定静态页面/模板目录
app.set('views', path.join(__dirname, 'views'));
......
//中间省略数行代码
......
app.use(express.static(path.join(__dirname, 'public')));
这里的__dirname表示当前目录,这行代码指定了静态页面/模板的目录。
3.通过app.use指定相关路径的处理路由
app.use('/', indexRouter);
这里表示,当访问网站时,系统会使用index路由处理,即<project>/routes/index.js。
而前面我们讲到过在index.js中,系统调用了res.render()方法传入模板文件,即返回浏览器静态页面。
ExpressJS 动态页面处理
通过res.send()方法进行。
router.get('/', function(req, res, next) {
res.send('respond with a resource');
});
示例代码可以查看<project>/routes/users.js
这就是处理路径/users的路由,将路由信息在app.js中写入即可。
var usersRouter = require('./routes/users');
app.use('/users', usersRouter);
当用户通过浏览器访问http://localhost:3000/users时,系统会调用<project>/routes/users.js中的response.get()方法返回信息给客户端。
总结
上面介绍了expressJS以及安装,静态页面,路由和动态页面的处理。
后面会介绍expressJS以及相关的模板引擎以及中间件。
如果有什么问题,欢迎朋友们留言讨论。
相关推荐
- 十分钟让你学会LNMP架构负载均衡(impala负载均衡)
-
业务架构、应用架构、数据架构和技术架构一、几个基本概念1、pv值pv值(pageviews):页面的浏览量概念:一个网站的所有页面,在一天内,被浏览的总次数。(大型网站通常是上千万的级别)2、u...
- AGV仓储机器人调度系统架构(agv物流机器人)
-
系统架构层次划分采用分层模块化设计,分为以下五层:1.1用户接口层功能:提供人机交互界面(Web/桌面端),支持任务下发、实时监控、数据可视化和报警管理。模块:任务管理面板:接收订单(如拣货、...
- 远程热部署在美团的落地实践(远程热点是什么意思)
-
Sonic是美团内部研发设计的一款用于热部署的IDEA插件,本文其实现原理及落地的一些技术细节。在阅读本文之前,建议大家先熟悉一下Spring源码、SpringMVC源码、SpringBoot...
- springboot搭建xxl-job(分布式任务调度系统)
-
一、部署xxl-job服务端下载xxl-job源码:https://gitee.com/xuxueli0323/xxl-job二、导入项目、创建xxl_job数据库、修改配置文件为自己的数据库三、启动...
- 大模型:使用vLLM和Ray分布式部署推理应用
-
一、vLLM:面向大模型的高效推理框架1.核心特点专为推理优化:专注于大模型(如GPT-3、LLaMA)的高吞吐量、低延迟推理。关键技术:PagedAttention:类似操作系统内存分页管理,将K...
- 国产开源之光【分布式工作流调度系统】:DolphinScheduler
-
DolphinScheduler是一个开源的分布式工作流调度系统,旨在帮助用户以可靠、高效和可扩展的方式管理和调度大规模的数据处理工作流。它支持以图形化方式定义和管理工作流,提供了丰富的调度功能和监控...
- 简单可靠高效的分布式任务队列系统
-
#记录我的2024#大家好,又见面了,我是GitHub精选君!背景介绍在系统访问量逐渐增大,高并发、分布式系统成为了企业技术架构升级的必由之路。在这样的背景下,异步任务队列扮演着至关重要的角色,...
- 虚拟服务器之间如何分布式运行?(虚拟服务器部署)
-
在云计算和虚拟化技术快速发展的今天,传统“单机单任务”的服务器架构早已难以满足现代业务对高并发、高可用、弹性伸缩和容错容灾的严苛要求。分布式系统应运而生,并成为支撑各类互联网平台、企业信息系统和A...
- 一文掌握 XXL-Job 的 6 大核心组件
-
XXL-Job是一个分布式任务调度平台,其核心组件主要包括以下部分,各组件相互协作实现高效的任务调度与管理:1.调度注册中心(RegistryCenter)作用:负责管理调度器(Schedule...
- 京东大佬问我,SpringBoot中如何做延迟队列?单机与分布式如何做?
-
京东大佬问我,SpringBoot中如何做延迟队列?单机如何做?分布式如何做呢?并给出案例与代码分析。嗯,用户问的是在SpringBoot中如何实现延迟队列,单机和分布式环境下分别怎么做。这个问题其实...
- 企业级项目组件选型(一)分布式任务调度平台
-
官网地址:https://www.xuxueli.com/xxl-job/能力介绍架构图安全性为提升系统安全性,调度中心和执行器进行安全性校验,双方AccessToken匹配才允许通讯;调度中心和执...
- python多进程的分布式任务调度应用场景及示例
-
多进程的分布式任务调度可以应用于以下场景:分布式爬虫:importmultiprocessingimportrequestsdefcrawl(url):response=re...
- SpringBoot整合ElasticJob实现分布式任务调度
-
介绍ElasticJob是面向互联网生态和海量任务的分布式调度解决方案,由两个相互独立的子项目ElasticJob-Lite和ElasticJob-Cloud组成。它通过弹性调度、资源管控、...
- 分布式可视化 DAG 任务调度系统 Taier 的整体流程分析
-
Taier作为袋鼠云的开源项目之一,是一个分布式可视化的DAG任务调度系统。旨在降低ETL开发成本,提高大数据平台稳定性,让大数据开发人员可以在Taier直接进行业务逻辑的开发,而不用关...
- SpringBoot任务调度:@Scheduled与TaskExecutor全面解析
-
一、任务调度基础概念1.1什么是任务调度任务调度是指按照预定的时间计划或特定条件自动执行任务的过程。在现代应用开发中,任务调度扮演着至关重要的角色,它使得开发者能够自动化处理周期性任务、定时任务和异...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- MVC框架 (46)
- spring框架 (46)
- 框架图 (58)
- flask框架 (53)
- quartz框架 (51)
- abp框架 (47)
- jpa框架 (47)
- laravel框架 (46)
- springmvc框架 (49)
- 分布式事务框架 (65)
- scrapy框架 (56)
- shiro框架 (61)
- 定时任务框架 (56)
- java日志框架 (61)
- JAVA集合框架 (47)
- grpc框架 (55)
- ppt框架 (48)
- 内联框架 (52)
- winform框架 (46)
- gui框架 (44)
- cad怎么画框架 (58)
- ps怎么画框架 (47)
- ssm框架实现登录注册 (49)
- oracle字符串长度 (48)
- oracle提交事务 (47)