Koa 是一个由 Express 的原班人马打造的,致力于成为 web 应用和 API 开发领域中的一个更小、更富有表现力、更健壮的 Web 框架。Koa 没有捆绑任何中间件,因此你可以根据自己的需求选择使用哪些功能。
安装与初始化项目
首先,你需要确保你的电脑上已经安装了 Node.js 和 npm(Node 包管理器)。可以通过以下命令来安装 Koa:
npm install koa
创建一个新的项目文件夹,并初始化一个新的 npm 项目:
mkdir my-koa-app cd my-koa-app npm init -y
然后,安装 Koa:
npm install koa
现在,我们可以在项目中创建一个简单的服务器:
// www.javascriptcn.com code example
// server.js
const Koa = require('koa');
const app = new Koa();
app.use(async ctx => {
ctx.body = 'Hello World';
});
app.listen(3000);
console.log('Server running on port 3000');运行这个脚本:
node server.js
访问 http://localhost:3000,你应该能看到 "Hello World" 的输出。
路由与请求处理
Koa 使用中间件来处理 HTTP 请求。中间件可以访问请求对象(ctx.request)和响应对象(ctx.response),并且可以修改它们或终止请求-响应周期。
基本路由
我们可以定义不同的路由来处理不同的 URL 请求:
// www.javascriptcn.com code example
const Koa = require('koa');
const app = new Koa();
app.use(async ctx => {
if (ctx.url === '/') {
ctx.body = 'Home Page';
} else if (ctx.url === '/about') {
ctx.body = 'About Page';
}
});
app.listen(3000);使用中间件
Koa 的中间件系统非常灵活。你可以通过使用第三方库来增强应用的功能,例如 koa-router 来处理复杂的路由逻辑。
首先,安装 koa-router:
npm install koa-router
然后,你可以这样使用它:
// www.javascriptcn.com code example
const Koa = require('koa');
const Router = require('koa-router');
const app = new Koa();
const router = new Router();
router.get('/', async ctx => {
ctx.body = 'Home Page';
});
router.get('/about', async ctx => {
ctx.body = 'About Page';
});
app.use(router.routes()).use(router.allowedMethods());
app.listen(3000);处理错误
在实际应用中,错误处理是一个重要的部分。Koa 提供了一些方法来处理异常情况。
错误中间件
你可以定义一个错误中间件来捕获未被其他中间件处理的异常:
// www.javascriptcn.com code example
const Koa = require('koa');
const Router = require('koa-router');
const app = new Koa();
const router = new Router();
app.use(async (ctx, next) => {
try {
await next();
} catch (err) {
ctx.status = err.status || 500;
ctx.body = { message: err.message };
ctx.app.emit('error', err, ctx);
}
});
router.get('/', async ctx => {
ctx.body = 'Home Page';
});
router.get('/about', async ctx => {
ctx.body = 'About Page';
});
app.use(router.routes()).use(router.allowedMethods());
app.listen(3000);自定义错误页面
除了简单的 JSON 响应外,你还可以返回自定义的 HTML 页面来表示错误:
// www.javascriptcn.com code example
app.use(async (ctx, next) => {
try {
await next();
} catch (err) {
ctx.status = err.status || 500;
ctx.body = '<h1>Error!</h1><p>' + err.message + '</p>';
ctx.app.emit('error', err, ctx);
}
});静态资源服务
如果你的应用需要提供静态资源(如图片、CSS 文件等),你可以使用 koa-static 中间件来简化这一过程。
首先,安装 koa-static:
npm install koa-static
然后,在你的应用中使用它:
// www.javascriptcn.com code example
const Koa = require('koa');
const Router = require('koa-router');
const serve = require('koa-static');
const app = new Koa();
const router = new Router();
app.use(serve(__dirname + '/public'));
router.get('/', async ctx => {
ctx.body = 'Home Page';
});
router.get('/about', async ctx => {
ctx.body = 'About Page';
});
app.use(router.routes()).use(router.allowedMethods());
app.listen(3000);在 public 目录下放置一些静态资源,比如 index.html 或者 style.css,Koa 将会自动处理这些请求。
总结
以上就是 Koa.js 的基础教程,包括安装、基本路由、中间件的使用、错误处理以及静态资源服务。Koa 的设计目标是提供一个更轻量级、更灵活的框架,这使得它非常适合构建现代 Web 应用和 API。希望这些示例代码能帮助你快速上手并理解 Koa 的核心概念。