流程点击登录按钮,前端把当前的url,传给后台后台把url传给,登录页面登录页面,点击登录,跳转到登录前的页面效果第一步第二步第三步router router.get(’/login’, initMiddleware, controller.default.pass.login);点击登录按钮viewappviewdefaultpublicheader.html<li><a href=“javascript:void(0)” id=“loginButton” target="_blank">登录</a></li>apppublicdefaultjsbase.js initLogin: function() { $("#loginButton").click(function() { // alert(location.href); location.href = ‘/login?returnUrl=’ + encodeURIComponent(location.href); }) }controllerappcontrollerdefaultpass.js async login() { //获取returnUrl var returnUrl = this.ctx.request.query.returnUrl; returnUrl = returnUrl ? decodeURIComponent(returnUrl) : ‘/’; await this.ctx.render(‘default/pass/login.html’, { returnUrl: returnUrl }); }登录页面appviewdefaultpasslogin.html<input type=“hidden” name=“returnUrl” id=“returnUrl” value="<%=returnUrl%>" /> $("#doLogin").click(function(e) { var returnUrl = $(’#returnUrl’).val(); var username = $(’#username’).val(); var password = $(’#password’).val(); var identify_code = $(’#identify_code’).val(); var reg = /^[\d]{11}$/; if (!reg.test(username)) { alert(‘手机号输入错误’); return false; } if (identify_code.length < 4) { alert(‘验证码长度不合法’); return false; } //ajax请求 $.post(’/pass/doLogin’, { username: username, identify_code: identify_code, password: password }, function(response) { console.log(response); if (response.success == true) { // location.href = “/”; location.href = returnUrl; } else { $("#identify_code_img").attr(‘src’, ‘/verify?mt=’ + Math.random()); alert(response.msg); } }) })去结算的登录跳转中间件appmiddlewareuserauth.jsmodule.exports = (options, app) => { return async function init(ctx, next) { //判断前台用户是否登录 如果登录可以进入 ( 去结算 用户中心) 如果没有登录直接跳转到登录 var userinfo = ctx.service.cookies.get(‘userinfo’); var prevPage = ctx.request.headers.referer; //上一个页面的地址 if (userinfo && userinfo._id && userinfo.phone) { //判断数据库里面有没有当前用户 var userResutl = await ctx.model.User.find({ “_id”: userinfo._id, “phone”: userinfo.phone }); if (userResutl && userResutl.length > 0) { //注意 await next(); } else { // ctx.redirect(’/login’); ctx.redirect(’/login?returnUrl=’ + encodeURIComponent(prevPage)); } } else { // ctx.redirect(’/login’); ctx.redirect(’/login?returnUrl=’ + encodeURIComponent(prevPage)); } };};效果