-
框架
- 是一种概念,是对常见功能的封装,是整个或部分系统的可重用设计,表现为一组抽象构件及构件实例间交互的方法,通过制定一种规则,具有约束性,给定一些Api,可让开发人员能够快速开发项目的工具,假如你要造一辆马车,在没有框架的情况下,你需要自己去伐木,去把木头做成木板,木棍,然后组成轮子,门,等部件,然后组装起来,但如果你用了框架,就相当于你有现成的轮子,门等部件,你只需要组装一下就可以了
-
Express
基于NodeJs平台,快速开发项目的web开发框架
-
起步
生成项目文件并初始化包管理文件
mkdir myapp && cd myapp && npm init -y
下载express模块
npm install express -S
创建文件
cd myapp && touch app.js
打开app.js输入以下代码
// 引入express模块 const Express = require('express'); // 实例化Express对象或者const app = express()调用也可以得到实例对象 const app = new Express(); // 注册路由 app.get('/', (req, res) => { res.end('Hello World'); }) // 启动服务 app.listen(3000, err => { !err && process.stdout.write('服务启动成功'); })
-
Express应用生成器
安装全局命令
npm install express-generator -g
生成express应用
// --view=pug 代表所使用的模板引擎为pug // 模板引擎-使用特定格式快速渲染页面的一种方式 // myapp表示要生成的应用的文件名称 express --view=pug myapp
打开myapp
cd myapp
下载依赖
npm install
启动应用
// DEBUG=myapp:* 表示开启bug检测模式 // npm start 表示启动项目 // Linux或mac下 DEBUG=myapp:* npm start // windows下 set DEBUG=myapp:* & npm start
默认端口为3000,浏览器输入localhost:3000,看到Welcome to Express 表示成功生成应用并启动
-
Koa
基于NodeJs的web应用框架,由Express的原班人马打造,致力于提供一个轻量级的架子,几乎所有功能都需要第三方的中间件来辅助完成,使用了node的新特性,比express更简洁,更轻量
-
express与koa对比
koa相对于express更加年轻,意味着express生态更加成熟,koa比express更加轻量,本身只提供一个架子,几乎所有功能都需要依赖于第三方插件,而express自身就集成了许多功能,这也意味着express更加笨重,会产生冗余的功能,express对于初学者更加友好,自身的功能足够使用,而koa则学习成本更高,毕竟连核心的路由也去掉了,都需要通过学习第三方中间件来实现,而很多中间件的功能一样,api却不同,koa使用了很多node的新特性及es6的新特性,而express则语法上比较陈旧一点,但是兼容性更好
koa起步
生成项目文件并初始化包管理文件package.json
mkdir myapp && cd myapp && npm init -y
下载koa模块
npm install koa -S
创建app.js
touch app.js
编辑app.js
// 引入koa模块 const Koa = require('koa'); // 实例化koa const app = new Koa(); // 创建接受Context对象的函数,Context由koa提供,表示一次对话的上下文 const main = ctx => { // ctx包含请求及响应对象,通过响应对象的body设置返回的内容 ctx.response.body = 'Hello World'; } // 使用加载main函数,注册到koa app.use(main); // 监听并启动服务 app.listen(3000);
衔接上文对象,ctx.response.type设置返回数据类型
const Koa = require('koa'); const app = new Koa(); const main = ctx => { // text或text/plain纯文本 // html或text/html解析为html // json ctx.response.type = 'html'; ctx.response.body = 'Hello World'; } app.use(main); app.listen(3000);
-
路由
简单来说路由间url到函数的映射,一个url指向一个地址,由此执行一个对应的规则,通常在web中理解为一个函数,而url到这个函数的过程称之为路由
-
原生路由
网站一般都是由多个页面组成的,不同的url指向不同的页面,在koa中可以通过ctx.request.path获取用户请求的路径
我们可以将我们的body指向一个网页模板,通过fs.createReadStream()获取文件流
const Koa = require('koa'); const fs = require('fs'); const app = new Koa(); const main = ctx => { ctx.response.type = 'html'; if(ctx.request.path === '/') { ctx.response.body = fs.createReadStream('./index.html'); } else { ctx.response.body = '页面未找到'; } } app.use(main); app.listen(3000);
-
中间件
- 简单来说就是处于操作系统和应用软件之间的一个类或者说插件,具有承上启下的作用,用于连接两个模块,可重用与业务逻辑无关的各种组件
-
koa-route模块
koa-route是koa的一个第三方中间件
const Koa = require('koa'); const app = new Koa(); const fs = require('fs'); const route = require('koa-route'); const about = require('./about.js'); const home = require('./home.js'); app.use(route.get('/home', home)); app.use(route.get('/about', about)); app.listen(3000);
home.js
const home = cxt => { console.log(cxt) cxt.response.body = '首页'; } module.exports = home;
about.js
const about = cxt => { cxt.response.body = '关于我们'; } module.exports = about;
-
静态资源
网站的静态资源(脚本、图片、字体、样式表),假如为他们都写一个路由将会很麻烦,比如用户需要单独访问该服务地址下的一张图片
这里用到了koa-static
const Koa = require('koa'); const app = new Koa(); const path = require('path'); const static = require('koa-static'); const main = static(path.join(__dirname, 'static')); app.use(main); app.listen(3000);
-
重定向
重新指定方向(路由),有时候当用户访问一个页面,当用户权限不够或者其他问题的时候,我们需要给用户一个响应,则需要重新为用户指定页面
const Koa = require('koa'); const app = new Koa(); const route = require('koa-route'); const redirect = ctx => { ctx.response.redirect('/'); }; const main = ctx => { ctx.response.body = '首页'; }; app.use(route.get('/redirect', redirect)); app.use(route.get('/', main)); app.listen(3000);
-
异步中间件
当出现异步操作时,比如异步读取文件,查询数据库等,我们就必须把我们的中间件设置为异步
const Koa = require('koa'); const app = new Koa(); const route = require('koa-route'); const fs = require('fs'); function readFile() { return new Promise((resolve, reject) => { fs.readFile('./index.html', (err, data) => { resolve(data); }) }) } const main = async function (ctx, next) { ctx.response.type = 'html'; ctx.response.body = await readFile(); }; app.use(main); app.listen(2000);
-
中间件的合成
koa-compose模块可以将多个中间件合成为一个
const compose = require('koa-compose'); const logger = (ctx, next) => { console.log(`${Date.now()} ${ctx.request.method} ${ctx.request.url}`); next(); } const main = ctx => { ctx.response.body = 'Hello World'; }; const middlewares = compose([logger, main]); app.use(middlewares);
-
错误处理
如果代码运行过程中发生错误,我们需要把错误信息返回给用户。HTTP 协定约定这时要返回500状态码。
ctx.throw()
const Koa = require('koa'); const app = new Koa(); const main = async function (ctx, next) { ctx.throw(500) }; app.use(main); app.listen(2000);
-
404错误
const main = ctx => { ctx.response.status = 404;// 等同于ctx.throw(404) ctx.response.body = 'Page Not Found'; };
-
错误处理中间件
const handler = async (ctx, next) => { try { await next(); } catch (err) { ctx.response.status = err.statusCode || err.status || 500; ctx.response.body = { message: err.message }; } }; const main = ctx => { ctx.throw(500); }; app.use(handler); app.use(main);
node js(框架)
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...