如何搭建 Koa 网站

Koa 是一个新的 web 框架,由 Express 幕后的原班人马打造, 致力于成为 web 应用和 API 开发领域中的一个更小、更富有表现力、更健壮的基石。 通过利用 async 函数,Koa 帮你丢弃回调函数,并有力地增强错误处理。 Koa 并没有捆绑任何中间件, 而是提供了一套优雅的方法,帮助您快速而愉快地编写服务端应用程序。

除了搭建网站以外,Koa还在微信小程序开发者工具中有重要的作用。如果您对开发微信小程序感兴趣的话,可以点击这里访问开发者工具接入指南,帮助您更好的链接腾讯云的开发能力。如果您还没有腾讯云的服务器,可以先点击这里进行免费套餐的试用。免费套餐包含企业版和个人版,超过11款热门产品和42款长期免费的云产品可以供您选择。如果您有长期搭建服务器的需求的话,可以点击这里进行服务器的购买,现在的促销力度很大哦。本指南主要教您使用Koa.js搭建一个简单的网站,您可能需要一个属于自己的域名。现在正是腾讯云的域名金秋盛惠,最低仅需1元起。也可以在购买云服务器时进行加购减免,比正常价格要便宜50%哦。

网站搭建

安装Node.js及npm

通过 npm 获取安装是使用 NODEJS SDK 的推荐方法,npm 是 Node.js 的包管理工具。关于 npm 详细可参考 npm 官网

  1. 执行以下安装命令: npm install tencentcloud-sdk-nodejs --save
  2. 在您的代码中引用对应模块代码,请参考下面的示例。

安装并使用 Koa

首先在你要建立项目的位置创建一个新的目录,并在终端运行npm init。这将为您设置package.json的安装文件。在本教程中,您只需要跟随步骤进行操作就可以了。现在,让我们来安装Koa。首先,在项目目录中运行:

npm install koa --save

请注意保留结尾处的标签。这将在安装依赖项到package.json文件的时候告诉npm自动加载npm模块。由于Koa是一个小模块的集合,您很可能会安装很多数量的模块。因此,该功能更加方便,为您节省了自己添加和确定所需版本的步骤。

接下来我们开始创建应用程序。在您的项目目录中,创建一个名为server.js的文件,并进行一些基本的设置:

//因为我们需要用到koa,所以我们先进行获取
var koa = require('koa');
//接下来进行初始化
var app = koa();
//并给它分配一个监听端口
app.listen(8008);
console.log('Koa listening on port 8008');

现在,这个应用程序还什么都做不了,接下来我们让它开始承载一些基本页面。

添加 Koa 中间件

Koa的中间件组成了Koa的所有模块化构建块,这使我们只能包含我们需要的东西。接下来让我们创建一个基本页面并添加一些koa的中间件来设置一些基本路由。 在终端中,我们会安装koa-route模块来让我们在Koa中设置路由。

npm install koa-route --save

接下来我们可以对server.js文件进行操作。

var koa = require('koa');
var route = require('koa-route'); //require it
var app = koa();
//and we'll set up 2 routes, for our index and about me pages
app.use(route.get('/', index));
app.use(route.get('/about', about));
app.listen(8008);
console.log('Koa listening on port 8008');

使用koa-route中间件非常简单。app.use()告诉我们的Koa应用程序使用我们传递给它的任何中间件。我们传递给route.get()方法的两个参数是路由和生成器函数(我们还没有定义),它告诉路由该做什么。因此,我们必须定义一个* index()生成器和一个* about()生成器。

MDN中对于JavaScript生成器的一些描述: “生成器是能够被退出且之后能重新进入的功能。其中的内容会在重新进入时被保存。”

回到设置我们的简单生成器,当我们点击我们设置的'/'和'/ about'路由时,我们的应用程序实际上可以执行某些操作。我们不会改变任何东西,因此在这个演示中,它们的行为与常规函数非常相似。您可能会想,“如果我们不像生成器那样使用它们,那么我们不能只传递一个常规函数吗?”嗯,不完全是。route.get()似乎在等待一个生成器,如果您尝试给它一个常规函数,它将抛出500错误。

//这个星号是关键符号,它将指派一个生成器
function *index() {
  this.body = "<h1>Hello! This is my home page!</h1>";
}
​
function *about() {
  this.body = "<h2>My name is Adam and I like JavaScript</h2>";
}

在生成器中,this代表Koa的环境。

Koa Context将节点的请求和响应对象封装到单个对象中,该对象为编写Web应用程序和API提供了许多有用的方法。这些操作在HTTP服务器开发中经常使用,它们在此级别而不是更高级别的框架中添加,这将迫使中间件重新实现此常用功能。每个请求都会创建一个Context ,并在中间件中作为接收者或this标识符引用。

网站代码

我们的应用代码如下:

var koa = require('koa');
var route = require('koa-route');
var app = koa();
app.use(route.get('/', index));
app.use(route.get('/about', about));
function *index() {
 this.body = "<h1>Hello! This is my home page!</h1>";
}
function *about() {
 this.body = "<h2>My name is Adam and I like JavaScript</h2>";
}
app.listen(8008);
console.log('Koa listening on port 8008');

我们用20行左右的代码创建了一个简单的Koa应用程序。接下来我们来进行验证。

在终端输入以下代码:

$ node --harmony server.js

这就是我在开头提到的环境模式。您将在终端中看到Koa listening on port 8008,并且您的浏览器会导航到localhost:8008

我们也可以导航到“关于”界面。在地址栏输入localhost:8008/about

建站完成

恭喜您!现在您已经使用Koa.js搭建了一个简单的网站应用。您也可以参照这篇指南对您的开发环境和生产环境进行优化。若您想将本地环境对接外部环境的话,在购买腾讯云域名后,可以按照操作指南对域名进行解析,同时使用腾讯云SSL对网站进行安全防护,使您的网站功能更加全面。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏小巫技术博客

App性能优化浅谈

1633
来自专栏尚国

深入剖析最新IE0day漏洞

在2018年4月下旬,我们使用沙箱发现了IE0day漏洞;自从在野外发现上一个样本(CVE-2016-0189)已经有两年多了。从许多方面来看,这个特别的漏洞及...

1512
来自专栏Bug生活2048

利用Python好好的整理你的附件

可以整理出一份excel用于导航(类似目录),可以通过excel来快速定位到所要的附件,如下图效果:

1033
来自专栏mathor

软件破解逆向工程实战(一)

本系列教程无需任何基础,直接学习即可,对于没有c/c++基础的同学来说也没有什么坎,多看,多做就能掌握,同时说一下,我们的QQ群:689696631,因为本系列...

2212
来自专栏非著名程序员

Android进阶:Android内存管理之道

对于移动应用开发,不管是Android还是IOS,内存都是永远的痛。但是合理的编写代码,会避免OOM的出现。 相信一步步走过来的Android从业者,每个人都...

2599
来自专栏申龙斌的程序人生

零基础学编程004:集成开发环境IDE

几天前介绍了《用在线编程环境快速上手》学习Python等编程语言,这种教学环境中的例子都非常简单,你不需要在自己的电脑中安装任何的软件,就可以马上动手学习Pyt...

3345
来自专栏Vamei实验室

Python标准库——走马观花

Python有一套很有用的标准库(standard library)。标准库会随着Python解释器,一起安装在你的电脑中的。它是Python的一个组成部分。这...

2166
来自专栏静晴轩

Gulp折腾之路(II)

前段时间折腾Gulp,主要是搜寻一些插件,组合之以优化前端开发流程。这段折腾历程除了达成所愿外,给予最大的收获是:只要你想实现某功能,基本就已有对应插件供使用;...

3635
来自专栏博客园迁移

工作中的一些经验小结

控制层   返回值统一 AOP 也方便前台 AOP 统计执行时间记录日志   参数不要出现Request, Response   返回码定义 不...

732
来自专栏木子昭的博客

<讲个故事>为什么IP地址与Mac地址缺一不可?为了方便理解,来讲个故事:再深一点:

IP与MAC 每个人的电话号码或邮箱地址都是独一无二的,所以在我们平时打电话,发邮件的时候,只需要知道对方的电话号码或邮箱即可实现通信. 而理论上,世界上的IP...

3147

扫码关注云+社区

领取腾讯云代金券