Open AndyFree96 opened 9 months ago
这好像是 egg.js 早期版本的问题,不知道现在解决了没有,你可以百度查一下,好像改这两个配置就可以,你试试
这好像是 egg.js 早期版本的问题,不知道现在解决了没有,你可以百度查一下,好像改这两个配置就可以,你试试
感谢回复,已尝试你提供的思路,修改dominWhiteList
和origin
之后,Chrome浏览器的Network
选项卡内容如下:
在macOS 14.1.1
操作系统上用Node.js 16.16.0
运行项目表现正常。
参考 https://github.com/eggjs/egg)](https://github.com/eggjs/egg 新建项目,将home.js
、router.js
和config.default.js
分别修改为如下内容:
home.js
const { Controller } = require("egg");
class HomeController extends Controller {
async index() {
const { ctx } = this;
ctx.session.index = "index";
ctx.body = "hi, egg";
}
async pointA() {
const { ctx } = this;
ctx.body = ctx.session.index;
console.log("pointA Session", ctx.session.index);
}
async pointB() {
const { ctx } = this;
ctx.session.pointB = "pointB";
ctx.body = ctx.session.index;
console.log("pointB Session", ctx.session.index);
}
async pointC() {
const { ctx } = this;
ctx.body = `${ctx.session.index} ${ctx.session.pointB}`;
console.log("pointC Session", ctx.session.index, ctx.session.pointB);
}
}
module.exports = HomeController;
router.js
/**
* @param {Egg.Application} app - egg application
*/
module.exports = (app) => {
const { router, controller } = app;
router.get("/", controller.home.index);
router.get("/pointA", controller.home.pointA);
router.post("/pointB", controller.home.pointB);
router.post("/pointC", controller.home.pointC);
};
config.default.js
/**
* @param {Egg.Application} app - egg application
*/
module.exports = (app) => {
const { router, controller } = app;
router.get("/", controller.home.index);
router.get("/pointA", controller.home.pointA);
router.post("/pointB", controller.home.pointB);
router.post("/pointC", controller.home.pointC);
};
浏览器访问http://127.0.0.1:7001
可看到:
访问http://127.0.0.1:7001/pointA
可看到:
终端显示如下:
访问http://127.0.0.1:7001/pointB
可看到:
终端显示如下:
访问http://127.0.0.1:7001/pointC
可看到:
终端显示如下:
说明在get
请求对应的路由函数index()
使用ctx.session.index = "index"
形式设置值,在post
请求对应的路由函数pointB()
不能正常获取到值(ctx.session.index
为undefined
)。同时也说明在post
请求对应的路由函数pointB()
使用ctx.session.pointB = "pointB"
形式设置值,在另一个post
请求对应的路由函数pointC()
也不能获取到值。
这是在 https://github.com/baiwumm/Vue2-Admin/issues/3#issue-2080155038 环境中测试的结果,由于对egg这个框架不是很了解,最终还是用了 https://github.com/baiwumm/Vue2-Admin/issues/3#issue-2080155038 提到的思路解决目前的问题,希望作者或者其他有缘人能提供更好的思路😊👏。
已⭐,感谢作者的开源贡献👏👏👏
环境
情况复现
将项目
clone
到本地后,分别按照Xmw_server和Xmw_web项目的README文件安装相关的包。新建vue2_baiwumm_com
数据库(Xmw_server项目中的config.default.js
可见),并将作者博客提供的SQL文件将数据库数据导入。之后执行yarn run debug
命令启动后端项目,修改前端项目的API请求地址为本地刚启动的后端地址,再执行yarn serve
启动前端项目。如下图所示,可以正常地从本地获取验证码:
输入用户名
admin
和 密码123456
后,前端页面显示如下:终端显示如下:
尝试方案
通过调试发现Xmw_server项目的
home.js
文件定义的generateVerifCode
方法:将验证码保存到
ctx.session.verifCode
中,然后在同文件的login
方法中,获取ctx.session.verifCode
时的值为undefined
。导致出现
login方法报错:TypeError: Cannot read properties of undefined (reading 'toLowerCase')
错误。我的解决方案是,在
home.js
顶部增加了一个全局的let globalScopeVerifCode = ""
变量,然后在generateVerifCode
方法中增加一条赋值语句globalScopeVerifCode = captcha.text.toLowerCase();
,最后将login
方法的中的代码段:改为:
可正常登录并进入系统中。
问题
请问作者有遇到这个问题吗?如何解决的呢?
期待回复😊😊😊