可以尝试 进入 http://localhost:3000/?search=koa&keywords=context 创建一个node项目
Koa -- 基于 Node.js 平台的下一代 web 开发框架
Egg.js 为企业级框架和应用而生,我们希望由 Egg.js 孕育出更多上层框架,帮助开发团队和开发人员降低开发和维护成本。
Egg 继承于 Koa:
Koa 是一个非常优秀的框架,然而对于企业级应用来说,它还比较基础。
Egg 选择 Koa 作为其基础框架,在它的模型基础上,进一步对它进行了一些增强
一:exports和module.exports的区别
exports方式使用方法是:exports.[function name] = [function name]
moudle.exports方式使用方法是
两者根本区别是:
exports 返回的是模块函数
module.exports 返回的是模块对象本身
,返回的是一个类
使用上的区别是:
exports的方法可以直接调用
module.exports需要new对象
之后才可以调用
例子:
/*module.exports*/
var app = {
name: 'app',
version: '1.0.0',
sayName: function(name){
console.log(this.name);
}
}
module.exports = app;
//使用
var app = require('./app.js');
app.sayName('hello'); //hello
====================================
/* exports */
var func1 = function() {
console.log("func1");
};
var func2 = function() {
console.log("func2");
};
exports.function1 = func1;
exports.function2 = func2;
//使用
var functions = require("./functions");
functions.function1();
functions.function2();
二:node 常见的ctx详解
1:简单介绍一下什么是ctx
ctx是context的缩写,一般称之为上下文,可以理解为上(request)下(response)沟通的环境,所以koa中把他们两都封装进了ctx对象
app.context
是从其创建 ctx
的原型。您可以通过编辑 app.context
为 ctx
添加其他属性
作为请求的上下文对象(在 Koa 1 中为中间件的 this
,在 Koa 2 中作为中间件的第一个参数传入)第一个参数为 ctx
,代表当前请求的上下文,是 Context 的实例
2:ctx结构
{
request: {
method: 'GET',
url: '/',
header: {
host: 'localhost:3000',
connection: 'keep-alive',
'cache-control': 'max-age=0',
'upgrade-insecure-requests': '1',
'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36',
accept: 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
'accept-encoding': 'gzip, deflate, sdch, br',
'accept-language': 'zh-CN,zh;q=0.8'
}
},
response: {
status: 200,
message: 'OK',
header: {
'content-type': 'text/plain; charset=utf-8',
'content-length': '25'
}
},
app: {
subdomainOffset: 2,
proxy: false,
env: 'development'
},
originalUrl: '/',
req: '<original node req>',
res: '<original node res>',
socket: '<original node socket>'
}
3:ctx对象常用的属性和方法
/*ctx.request*/
ctx.request.url
ctx.request.query
ctx.request.querystring
ctx.request.method
ctx.request.path
ctx.request.on('data', func)
ctx.request.accepts()
//代码示例
const koa = require('koa');
const app = new koa();
app.use(async ctx => {
ctx.response.body = {
url: ctx.request.url,
query: ctx.request.query,
querystring: ctx.request.querystring
}
})
app.listen(3000, () => {
console.log('server is listening at http://localhost:3000');
})
/*ctx.response*/
ctx.response.body
ctx.response.status
ctx.response.type
ctx.response.redirect(url, [alt])
/*ctx.state*/
//ctx.state是推荐的命名空间,通过中间件传递信息和前端视图
ctx.state.user = yield User.find(id) //把user属性存放到ctx.state对象里,以便能被另外一个中间件读取。
/*ctx.cookies*/
ctx.cookies.set(name, value, [options]);
ctx.cookies.get(name, [options]);
/*ctx.throw*/
ctx.throw(500) //用于抛出错误,把错误信息返回给用户。
其中 ctx.cookies.set(name, value, [options]); option 的配置表如下图所示
对于ctx详情可参考 https://koa.bootcss.com/