许多刚刚开始接触 Node.js 后端开发的友人,在运用原生 http 模块编写完几个接口之后,常常会感觉到处理静态页面、路由分发这类基础工作格外繁杂。

写代码时,每一行都得亲自去编写,判断 MIME 类型时,每一个都要自己来进行判定,如此一来开发效率着实不算高。

这时候,一个轻量级的 Web 框架就能派上大用场。

服务器 Nodejs 安装 _express.js 安装教程 _node.js express 框架

当下,在 GitHub 上,收获了 47.7k 星的 Express,其下载量始终处于遥遥领先的态势,它是极为适合用于快速搭建中小型应用的一种选择。

生成器快速建起项目骨架

靠自身动手去搭建 Express 的项目架构,虽说也能够运行起来,然而远远比不上运用官方工具来得迅速。

那种名为 express - generator 的脚手架工具,能够协助我们去自动生成被推荐的标准目录,其中涵盖 routes 文件夹、views 文件夹以及各种各样的配置文件。

要是你已然拥有一个项目目录,例如此前创建的 forms 文件夹,那就径直在终端当中进入这个目录,运行 express 命令便可完成。

系统会给出目录非空的提示,询问你是否要继续,在这个时候,输入 y 进行确认便可以了。

跟着继续运行 npm install 去安装依赖包等,待项目启动之后,于浏览器将 http://localhost:3000 打开,可以看到生成好的默认主页!

整个过程从零到看到页面,甚至用不了五分钟。

静态页面不用再自己读文件

D:ProjectsnodejsNodeDemoforms>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

要是处于没有框架的状况下,要返回一个 HTML 页面,那就得借助 fs 模块去读取文件,并且还得手动去设置 Content-Type。

Express 处理静态页面,逻辑被大幅简化。

D:ProjectsnodejsNodeDemoforms>npm install -g express-generator
D:Program Filesnodejsnode_globalexpress -> D:Program Filesnodejsnode_globalnode_modulesexpress-generatorbinexpress-cli.js
+ express-generator@4.16.1
added 10 packages from 13 contributors in 6.346s

仅仅是要在与之对应的路由文件之中去调用 res.render 这个方法,把模板文件的名称传递进去,如此一来框架便会自动在 views 目录里将相应的模板找寻到并且进行渲染使其呈现出来。

D:ProjectsnodejsNodeDemoforms>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 : publicjavascripts
   create : publicimages
   create : publicstylesheets
   create : publicstylesheetsstyle.css
   create : routes
   create : routesindex.js
   create : routesusers.js
   create : views
   create : viewserror.jade
   create : viewsindex.jade
   create : viewslayout.jade
   create : app.js
   create : package.json
   create : bin
   create : binwww
   install dependencies:
     > npm install
   run the app:
     > SET DEBUG=node10:* & npm start

比如在入口文件 app.js 当中,借助 app.use('/',indexRouter) 这般的代码,将路径与路由进行绑定

在 /routes/index.js 里,存在着真正的处理逻辑,其代码十分简洁,不存在来回绕圈的判断,仅仅用几行代码,便达成了从请求直至页面返回的操作。

动态接口用 res.send 快速响应

D:ProjectsnodejsNodeDemoforms>npm install
added 4 packages from 3 contributors, removed 2 packages, updated 16 packages and audited 141 packages in 12.091s
found 0 vulnerabilities

D:ProjectsnodejsNodeDemoforms>npm start
> forms@0.0.0 start D:ProjectsnodejsNodeDemoforms
> node ./bin/www
GET / 200 17.703 ms - 207
GET /stylesheets/style.css 200 5.473 ms - 111

不只是页面,做 API 接口同样方便。

倘若打算去做一条 /users 路径,使之返回某些动态数据,于 app.js 之中引入用户路由然后进行挂载

express.js 安装教程 _ 服务器 Nodejs 安装 _node.js express 框架

在与之对应的 /routes/users.js 文件里头,借助 res.send 这个方法,直接将 JSON 数据或者字符串,返还给客户端

这种处理方式特别适合开发初期快速验证逻辑。

曾经,我针对 Java Blueprint EJB 去做一项简易的增删改查操作,仅仅是配置服务器,以及调试各类 web server,就耗费了两天时间。

//引入 express
var express = require('express');
var router = express.Router();
/* 获取静态页面 */
router.get('/', function(req, res, next) {
  res.render('index', { title: 'Express' });
});
//导出抹开
module.exports = router;

Express 一举将 HTTP 服务器与应用代码融合在一起,开发者凭借代码去操控服务器行为,如此便节省了大量繁杂累赘的环境配置所需时间。

路由设计让代码结构更清晰

稍微大那么一点儿的项目,一旦把所有那样不同的接口都一股脑地堆放在同一个文件当中,到了后期进行维护的时候,就会变得极其令人头疼不已。

Express 的路由系统天然支持模块化拆分。

var indexRouter = require('./routes/index');

于 app.js 里面,借助 app.use 来加载各异的路由模块,各个路由模块仅仅关注自身所负责的路径

app.set('views', path.join(__dirname, 'views'));
......
//中间省略数行代码
......
app.use(express.static(path.join(__dirname, 'public')));

比如说,那所有跟首页有关联的逻辑,都放置在 index.js 里面,而所有和用户相关的接口,则是放在 users.js 当中

在每一个路由文件当中,针对于不一样的 HTTP 方法,那像 GET、POST 这些,能够去撰写单独的处理函数呢

app.use('/', indexRouter);

此以约定大于配置的形式,使得新人接手项目之际,也能够迅速找寻到相应的代码位置。

不少随后流行起来的 Node.js 框架,像 Koa 这般,尽管是由原班人马所打造,然而在设计思路方面,依旧能够察觉到 Express 简洁路由的那种影子。

开发效率提升的真实感受

router.get('/', function(req, res, next) {
  res.send('respond with a resource');
});

就实际开发体验而言,运用 Express 去构建一个简易的 CRUD 应用,的确能够将时间缩短至几个小时乃至更短的时长。

var usersRouter = require('./routes/users');
app.use('/users', usersRouter);

不需要纠结服务器软件的安装,不需要反复调试连接池配置。

当然了,若所面对的是实实在在 的大规模企业级的应用,牵涉复杂的分布式事务以及海量的并发情况,我个人内心还是更加倾向于 Java 生态。

node.js express 框架 _express.js 安装教程 _ 服务器 Nodejs 安装

但针对于中小型的应用情况,以及内部所使用的工具,还有快速进行原型验证的需求而言,Node.js 与 Express 绝对是属于首选的那种组合。

在下一篇当中,我们会进一步深入探讨,讲讲在 Express 这个环境里,怎样去获取从前端传递过来的各类参数,以及如何与模板引擎协同,进而实现更为复杂的页面渲染操作。