node框架那些事儿
一、简单介绍
express:适合初学者,模版引擎,路由,中间件
koa2:核心中间件
eggjs:企业级应用框架
二、express
服务端框架,提供路由功能,异常处理。路由系统+中间件构成web开发框架,一个express应用就是调用各种中间件,express内部维护一个函数数组。中间件,在这里就是函数,不同的处理函数。
1、参考学习
express:http://www.expressjs.com.cn/
vscode调试express:https://www.cnblogs.com/camille666/p/vscode_debug_complex_nodejs_files.html
2、快速体验
# 快速搭建node应用程序 npm install express-generator -g express --view=ejs myapp
3、方法对比
app.use vs app.all vs express.Router().get
// express
const express = require('express');
const app = express();
app.use('/api/person' , function(req, res, next) {
res.send('respond with a resource');
});
// router
const express = require('express');
const router = express.Router();
router.get('/', function(req, res, next) {
res.send('respond with a resource');
});
app.use(path,callback)中的callback既可以是router对象又可以是函数,app.get(path,callback)中的callback只能是函数。
app.use('/a')只用路径以/a开始,可以匹配/a/b,/a/b/c;设置中间件,是否以什么开头;
app.all是具体的路由,直接使用字符串的方式,则匹配的是/a这个路径,不能匹配/a/b 、/a/b/c。设置路由,匹配完整路径。
express.Router是一个迷你版app。
app.listen vs http.createServer(app).listen
// express
const express = require('express');
const app = express();
app.listen('8085', () => {
console.log('人员管理系统');
});
// router
const express = require('express');
const app = express();
const http = require('http');
const server = http.createServer(app);
server.listen('8085');
server.on('error', function(err) {});
server.on('listening', function() {});
都可以创建http服务器,如果要创建https,需要引入https服务。
debug vs morgan
debug是一个通用的npm包,可以用在服务端,也可以用在浏览器端,用于调试日志,控制日志输出,不局限于请求日志,更不限于http请求;
morgan是express中间件,http请求日志中间件。
app.render vs res.render vs res.send
4、原理实践
/**
* 仿express实现中间件机制
*
* @return {app}
*/
function express() {
let funcs = []; // 待执行的函数数组
let app = function (req, res) {
let i = 0;
function next() {
const task = funcs[i++]; // 取出函数数组里的下一个函数
if (!task) { // 如果函数不存在,return
return;
}
task(req, res, next); // 否则,执行下一个函数
}
next();
}
/**
* use方法就是把函数添加到函数数组中
* @param task
*/
app.use = function (task) {
funcs.push(task);
}
return app; // 返回实例
}
// 测试
const http = require('http');
const app = express();
http.createServer(app).listen('3000', function () {
console.log('listening 3000....');
});
function middlewareA(req, res, next) {
console.log('middlewareA before next()');
next();
console.log('middlewareA after next()');
}
function middlewareB(req, res, next) {
console.log('middlewareB before next()');
next();
console.log('middlewareB after next()');
}
function middlewareC(req, res, next) {
console.log('middlewareC before next()');
next();
console.log('middlewareC after next()');
}
app.use(middlewareA);
app.use(middlewareB);
app.use(middlewareC);
node框架那些事儿的更多相关文章
- Java日志框架那些事儿
文章首发于[博客园-陈树义],点击跳转到原文Java日志框架那些事儿. 在项目开发过程中,我们可以通过 debug 查找问题.而在线上环境我们查找问题只能通过打印日志的方式查找问题.因此对于一个项目而 ...
- 从Nest到Nesk -- 模块化Node框架的实践
文: 达孚(沪江Web前端架构师) 本文原创,转至沪江技术 首先上一下项目地址(:>): Nest:https://github.com/nestjs/nest Nesk:https://git ...
- node框架koa
node的两大常见web服务器框架有express和koa,之前已经介绍过express了现在来介绍下koa吧~ koa也是express团队的出品,意在利用es7新出的async来告别"回 ...
- node框架express
见识到原生nodeJs服务器的恶心后,我们来用下简单好用的框架吧~ 服务器无非主要提供接口和静态文件读取,直接上代码: const express = require('express'); cons ...
- Node 框架接入 ELK 实践总结
本文由云+社区发表 作者:J2X 我们都有过上机器查日志的经历,当集群数量增多的时候,这种原始的操作带来的低效率不仅给我们定位现网问题带来极大的挑战,同时,我们也无法对我们服务框架的各项指标进行有效的 ...
- 《开源框架那些事儿22》:UI框架设计实战
UI是User Interface的缩写.通常被觉得是MVC中View的部分,作用是提供跟人机交互的可视化操作界面. MVC中Model提供内容给UI进行渲染,用户通过UI框架产生响应,一般而言会由控 ...
- AdonisJs(Node框架)学习总结
先列出作为前端开发人员必须知道的10个NodeJs框架 AdonisJs 一个服务端渲染的MVC框架,它是 Laravel (PHP框架)的一个 NodeJS 版本. 可以安装脚手架工具adonis ...
- node框架express里面静态文件中间件express.static,根据路径名查找文件
- 是express框架下的一个方法,可以根据请求路径名查找某个文件下文件名字和路径名相同的文件 - 3.X里面有20多个中间件,但是在4.X里面 只保留了express.static - 语法 ex ...
- express node 框架介绍
开篇先声明一个重点: 就是论文件模块的重要性,之前我一直以为 fs 模块不重要,后来遇到了问题,才发现我之前的自以为是是多么愚蠢的一件事,我现在知道了 fs 模块的重要性 fs 模块:用于对文件的操作 ...
随机推荐
- 如何开发一个异常检测系统:异常检测 vs 监督学习
异常检测算法先是将一些正常的样本做为无标签样本来学习模型p(x),即评估参数,然后用学习到的模型在交叉验证集上通过F1值来选择表现最好的ε的值,然后在测试集上进行算法的评估.这儿用到了带有标签的数据, ...
- 阿里云(CentOs)搭建SVN服务
系统环境 CentOS Linux release 7.6.1810 (Core) 一.通过yum命令安装svnserve,命令如下: yum -y install subversion 此命令会全自 ...
- Q-learning和Sarsa的区别
Q-learning是off-policy,而Sarsa是on-policy学习. Q-learning在更新Q table时,它只会需要Q值最大,但是不一定会选择使这个Q值最大的动作,因为选择哪个动 ...
- Vue——核心思想--mvvm
Vue的核心思想为数据驱动和组件化. 一.数据驱动——双向绑定 Vue是一种MVVM框架.而DOM是数据的一个种自然映射.传统的模式是通过Ajax请求从model请求数据,然后手动的触发DOM传入数据 ...
- 洛谷 P1121 环状最大两段子段和 题解
每日一题 day57 打卡 Analysis 对于这个问题,由于分成了两个子序列,我们不妨就是枚举一下可能出现的情况: 无非就这两种: 1.+++++0000+++++0000++++ 2.0000+ ...
- 用于C#的极速序列化/反序列工具 MessagePack
MessagePack 比MsgPack-Cli快10倍,并且优于其他C#序列化器.MessagePack for C#还内置了对LZ4压缩的支持 - 一种极快的压缩算法.对于性能追求很重要,特别是在 ...
- JS回调函数怎么写的?
相信每个做前端的同学都用过太多太多的回调函数, 接下来就看看回调函数是怎么来的. 这玩意儿也没那么神秘,直接看代码: 声明函数的时候,把回调函数用作参数,并且在函数内调用它 function getD ...
- Centos pip 安装uwsgi 报错“fatal error: Python.h: No such file or directory”
解决方法: 安装python-devel即可,注意,不是python-dev yum -y install python-devel
- nginx 访问控制之deny allow
Nginx的deny和allow指令是由ngx_http_access_module模块提供,Nginx安装默认内置了该模块. 除非在安装时有指定 --without-http_access_modu ...
- 【BigData】Java基础_循环
1.for循环 语法: for (初始表达式;布尔表达式;步进) { 循环体: } 实例: package cn.test.logan.day02; import java.util.Scanner; ...