Koa2后端项目搭建(Babel7+)

项目前提:已搭建 Node 环境

一、初始化项目

在项目根目录下打开 cmd 面板,执行

npm init

二、项目目录架构

项目初始化后会生成 package.json 相关文件,接下来在根目录创建 .babelrc 文件、src 文件夹、dist文件夹。

.babelrc 作为 Babel 的配置文件,src 文件夹保存我们的项目代码,dist 文件夹用来保存项目代码经过 Babel 编译后的代码。

├─.babelrc
├─package-lock.json
├─package.json
├─src
|  ├─app.js
|  ├─routes
|     ├─index.js
|     ├─Test.js
|  
├─dist

三、下载依赖

下载前先设置Babel的全局环境,这是因为我们下载的插件里有依赖Babel之前版本

npm list -g --depth 0
npm install --save @babel/cli @babel/core @babel/node @babel/preset-env @babel/polyfill @babel/runtime @babel/plugin-transform-runtime axios koa koa-bodyparser koa-convert koa-cors koa-logger koa-onerror koa-router

四、.babelrc 文件配置

{
    "presets": ["@babel/env"],
    "plugins": ["@babel/plugin-transform-runtime"]
}

同时配置 package.json 命令行,增加 Babel 编译 src 文件夹代码的命令,并输出到 dist 文件夹。

"scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "babelbuild": "babel src --out-dir dist"
  }

之后修改完代码后执行该命令就可以编译代码了

npm run babelbuild

五、项目基础逻辑文件搭建

在 src 文件夹创建 app.js 文件、 routes 文件夹,在 routes 文件夹下创建 index.js 以及测试用例的一个接口文件 Test.js

├─.babelrc
├─package-lock.json
├─package.json
├─src
|  ├─app.js
|  ├─routes
|     ├─index.js
|     ├─Test.js
| 
├─dist

 app.js 文件内容,其中 app.listen(9080) 里面的端口号可以根据自己的需要重新设置:

const koa = require('koa');
const convert = require('koa-convert');
const cors = require('koa-cors');
const bodyParser = require('koa-bodyparser');
const logger = require('koa-logger');
const onError = require('koa-onerror');

import routes from './routes';

const app  = new koa();
onError(app);
app.use(convert(cors()));
app.use(convert(logger()));
app.use(bodyParser());
app.use(routes.routes(),routes.allowedMethods());
app.on('error',(error,ctx) => {
    console.log('奇怪的错误' + JSON.stringify(ctx.onError));
    console.log('server error:' + error);
})

app.listen(9080);
console.log('listening ...');

export default app;

 routes 文件夹下 Test.js 文件内容,其余接口文件格式大致类似:

const router = require('koa-router')();
router.post('/test', async(ctx, next) => {
    ctx.body = "123";
});

export default router;

 routes 文件夹下 index.js 文件内容,其余接口文件也需引入,执行 router.use() 方法:

import Test from './Test';

const router = require('koa-router')();
router.use(Test.routes(),Test.allowedMethods());
......


export default router;

六、启动项目,监听接口

 修改 package.json 文件,增加启动项目命令行

"scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "babelbuild": "babel src --out-dir dist",
    "start": "node dist/app.js"
  }

 首先执行 Babel 编译命令,会在 dist 文件夹内生成编译后的代码,然后执行项目启动命令

npm run babelbuild
npm run start

执行编译命令后项目目录结构如下: 

├─.babelrc
├─package-lock.json
├─package.json
├─src
|  ├─app.js
|  ├─routes
|  |   ├─index.js
|  |   ├─Test.js
├─dist
|  ├─app.js
|  ├─routes
|  |   ├─index.js
|  |   ├─Test.js

执行启动命令后,显示如下界面表示启动成功

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是一个使用 Koa + JSON + JWT + Token 的图书管理系统后端服务器的示例代码。 首先,安装必要的依赖: ```bash npm install koa koa-router koa-bodyparser jsonwebtoken uuid ``` 其中,koaKoa 框架本身,koa-router 是路由模块,koa-bodyparser 是解析请求体的模块,jsonwebtoken 是生成和验证 JWT 的模块,uuid 是生成唯一标识符的模块。 然后,创建一个 index.js 文件,输入以下代码: ```javascript const Koa = require('koa'); const Router = require('koa-router'); const bodyParser = require('koa-bodyparser'); const jwt = require('jsonwebtoken'); const uuid = require('uuid'); const app = new Koa(); const router = new Router(); const books = [ { id: '1', name: 'JavaScript 高级程序设计', author: 'Nicholas C. Zakas' }, { id: '2', name: 'JavaScript DOM 编程艺术', author: 'Jeremy Keith' }, { id: '3', name: 'JavaScript 语言精粹', author: 'Douglas Crockford' }, ]; const secret = 'my-secret'; router.post('/login', async (ctx) => { const { username, password } = ctx.request.body; if (username === 'admin' && password === 'admin123') { const token = jwt.sign({ username }, secret, { expiresIn: '1h' }); ctx.body = { token }; } else { ctx.status = 401; ctx.body = { message: 'Invalid credentials' }; } }); router.get('/books', async (ctx) => { const token = ctx.request.headers.authorization; if (!token) { ctx.status = 401; ctx.body = { message: 'Missing authentication token' }; return; } try { const decoded = jwt.verify(token, secret); ctx.body = { books }; } catch (error) { ctx.status = 401; ctx.body = { message: 'Invalid authentication token' }; } }); router.post('/books', async (ctx) => { const token = ctx.request.headers.authorization; if (!token) { ctx.status = 401; ctx.body = { message: 'Missing authentication token' }; return; } try { const decoded = jwt.verify(token, secret); const { name, author } = ctx.request.body; const id = uuid.v4(); books.push({ id, name, author }); ctx.body = { id }; } catch (error) { ctx.status = 401; ctx.body = { message: 'Invalid authentication token' }; } }); app.use(bodyParser()); app.use(router.routes()); app.use(router.allowedMethods()); app.listen(3000, () => console.log('Server is running on http://localhost:3000')); ``` 该代码实现了以下功能: 1. 登录接口:POST /login,接受用户名和密码,验证成功后返回一个 JWT。 2. 获取图书列表接口:GET /books,需要在请求头中带上 JWT,验证成功后返回图书列表。 3. 添加图书接口:POST /books,需要在请求头中带上 JWT,验证成功后添加一本图书,并返回该图书的 ID。 这个示例代码是一个比较简单的图书管理系统后端服务器,可以根据实际需求进行修改和完善。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值