我相信很多前端小伙伴,跟我一样都想搭建自己的一个服务器,自己也能写后端;
有的小伙伴可能是为了搭建自己的博客,也有的小伙伴是为了自己写一些项目(比如:小程序,工具类网站等);还有我这种就为了装的人,哈哈哈
不管因为什么原因去学习,他们都是值得我们赞扬和学习的对象;
同时在这儿把我的座右铭送给大家:
别因今天的懒惰,让明天后悔
下面我们开始今天的正题:eggjs的项目搭建
我们可以根据官方文档来搭建;
官文文档给大家提供了快捷式搭建的方法:小伙伴们根据这个创建文件即可
npm i egg-init -g // 安装egg
mkdir egg-example
cd egg-example
npm init egg --type=simple
npm i
当我们执行到npm init egg --type=simple时,会提示以下内容,这是官方给大家封装好的;可以根据自己的需要选择,我选择的是第一个基础组件
microservice - Microservice app boilerplate based on egg
sequelize - egg app with sequelize
ts - Simple egg && typescript app boilerplate
empty - Empty egg app boilerplate
plugin - egg plugin boilerplate
framework - egg framework boilerplate
后面一直回车就行,当完成以后;npm i 即可
然后我们用Postman去请求你的本地ip链接地址,就会返回:
npm run dev 启动项目
hi, egg
这儿跟大家说一说比较重要的文件目录:
如果写了重要的,就是我们需要经常使用的文件;主要的文件我都会说明以及用途等(可能不会说特别详细,会讲个大概);非主要的你们大致也都知道是啥,我就没必须要去重复说了
- app
-
- controller
-
- router
- config
.
├─ .eslintignore
├─ .eslintrc
├─ .github
│ └─ workflows
│ └─ nodejs.yml
├─ .gitignore
├─ README.md
├─ app // 重要
│ ├─ controller // 重要: 主要写接口文件,可以在里面创建多个子文件:如home.js
│ │ └─ home.js
│ ├─ public // 重要:你如果有一些图片资源需要保存(系统盘),那么一般就是保存在这儿
│ └─ router.js // 重要: 路由配置文件,如果你接口路由名称等,以及登录验证(token)
├─ config // 重要:下面的两个文件主要是限制一些跨域,是否开启防御,mysql插件等
│ ├─ config.default.js
│ └─ plugin.js
├─ jsconfig.json
├─ logs // 日志
│ └─ example
│ ├─ common-error.log
│ ├─ egg-agent.log
│ ├─ egg-schedule.log
│ ├─ egg-web.log
│ └─ example-web.log
├─ package-lock.json
└─ package.json
做到这儿,大家也都能创建项目了,那么我们就可以开始写接口了,为让大家可以更好的学习我写两个假数据接口吧!
一个get,一个post(接收参数等)
GET
我在这儿就不新创建文件了;我将在controller/home.js里面写即可
// app/controller/home.js 文件
async learn () {
const { ctx } = this;
ctx.body = {
code:200,
msg:'成功',
data:[{id:1},{id:2}]
};
}
增加路由接口
// app/router.js 文件
router.get('/learn', controller.home.learn);
如果你写到这儿然后通过Postman去发送请求,一直没有返回数据的话,你重启一下项目即可!
启动项目后,你再次发送请求,会发现;控制台发出了警告!
原因是eggjs默认开启了防御功能,禁止访问,这个时候我们需要关闭防御
然后就可以正常请求啦
找到config/plugin.js
// config/plugin.js 文件
security: { // 关闭csrf防御
enable: false,
},
报错提示:
2023-02-24 18:21:34,971 WARN 3924 invalid csrf token. See https://eggjs.org/zh-cn/core/security.html#安全威胁csrf的防范
2023-02-24 18:21:34,973 WARN 3924 nodejs.ForbiddenError: invalid csrf token
at Object.throw (D:\Test\egg-example\node_modules\koa\lib\context.js:97:11)
at Object.assertCsrf (D:\Test\egg-example\node_modules\egg-security\app\extend\context.js:163:32)
at csrf (D:\Test\egg-example\node_modules\egg-security\lib\middlewares\csrf.js:39:9)
at dispatch (D:\Test\egg-example\node_modules\egg-security\node_modules\koa-compose\index.js:42:32)
at D:\Test\egg-example\node_modules\egg-security\node_modules\koa-compose\index.js:34:12
at dispatch (D:\Test\egg-example\node_modules\koa\node_modules\koa-compose\index.js:42:32)
at session (D:\Test\egg-example\node_modules\koa-session\index.js:41:13)
at dispatch (D:\Test\egg-example\node_modules\koa\node_modules\koa-compose\index.js:42:32)
at overrideMethod (D:\Test\egg-example\node_modules\koa-override\index.js:38:12)
at dispatch (D:\Test\egg-example\node_modules\koa\node_modules\koa-compose\index.js:42:32)
message: "invalid csrf token"
pid: 3924
hostname: DESKTOP-DQVCB8H
返回结果:
{
"code": 200,
"msg": "成功",
"data": [
{
"id": 1
},
{
"id": 2
}
]
}
get 如果需要传值的话:
有一下这个方式:即可接收到前台传递过来的值
var query = ctx.query; // 接收值
router.get('/learn', controller.home.learn); // 路由方式
POST
controller/home.js文件:
request.body就是接收前台传递过来的参数;
// app/controller/home.js 文件
async setPost () {
const { ctx } = this;
const { page = 1,pageSize = 20 } = ctx.request.body;
ctx.body = {
code:200,
msg:'成功',
data:{page,pageSize}
};
}
增加路由接口
// app/router.js 文件
router.post('/setPost', controller.home.setPost);
然后发送接口请求吗,成功返回:
{
"code": 200,
"msg": "成功",
"data": {
"page": 1,
"pageSize": 20
}
}
到这儿,基本的接口就完成了!
后面我会根据文档一写篇关于egg-mysql使用的文章;期待到时候我写作有所提升吧!哈哈哈
往期文章