流星与咒语。横切关注点
Meteor with mantra. Cross cutting concerns
我正在使用 mantra 在 meteor 中开发应用程序。这是 users
模块的 routes.jsx。我希望能够在其他模块的操作和路由中使用 requireLogin
和 redirectUsers
。或者一般来说,我如何在不违反口头禅架构的情况下处理横切关注点?
import React from 'react';
import {mount} from 'react-mounter';
import Login from './containers/login';
import Register from './containers/register';
import App from '/client/modules/core/components/app.jsx';
export default function (injectDeps,{FlowRouter,Meteor,LocalState}) {
let userRoutes = FlowRouter.group({
prefix:'/user',
name:'user'
});
const AppCtx = injectDeps(App);
const redirectUsers = () => {
if(Meteor.userId()){
const path = LocalState.get('INTERRUPTED_REQUEST_PATH')
? LocalState.get('INTERRUPTED_REQUEST_PATH') : '/joke/';
FlowRouter.go(path);
return;
}
}
const requireLogin = (path) => {
if(!Meteor.userId()){
LocalState.set('INTERRUPTED_REQUEST_PATH',path);
FlowRouter.go('/user/login');
return;
}
}
userRoutes.route('/', {
triggersEnter: [(context,redirect) => {
if(!Meteor.userId()){
requireLogin('/user/login');
}
}],
action() {
}
});
userRoutes.route('/login',{
triggersEnter: [(context,redirect) => {
redirectUsers();
}],
action() {
mount(AppCtx, {
content: () => (<Login />)
});
}
});
}
我一直在 /clients/modules/core/libs/
中定义共享函数并在任何地方使用它。当你在 core
模块外使用函数时,我打破了封装,但我还没有找到更好的方法。如果你知道请告诉我。
此外,triggersEnter 中的重定向和身份验证被视为反模式。
这是我的开源 Mantra 应用程序 Vym 中的真实示例。看那里位:
如果您想查看更多内容,可以使用该存储库 here。
您也可以使用此 reusable auth composer 并在组件级别处理身份验证。
我正在使用 mantra 在 meteor 中开发应用程序。这是 users
模块的 routes.jsx。我希望能够在其他模块的操作和路由中使用 requireLogin
和 redirectUsers
。或者一般来说,我如何在不违反口头禅架构的情况下处理横切关注点?
import React from 'react';
import {mount} from 'react-mounter';
import Login from './containers/login';
import Register from './containers/register';
import App from '/client/modules/core/components/app.jsx';
export default function (injectDeps,{FlowRouter,Meteor,LocalState}) {
let userRoutes = FlowRouter.group({
prefix:'/user',
name:'user'
});
const AppCtx = injectDeps(App);
const redirectUsers = () => {
if(Meteor.userId()){
const path = LocalState.get('INTERRUPTED_REQUEST_PATH')
? LocalState.get('INTERRUPTED_REQUEST_PATH') : '/joke/';
FlowRouter.go(path);
return;
}
}
const requireLogin = (path) => {
if(!Meteor.userId()){
LocalState.set('INTERRUPTED_REQUEST_PATH',path);
FlowRouter.go('/user/login');
return;
}
}
userRoutes.route('/', {
triggersEnter: [(context,redirect) => {
if(!Meteor.userId()){
requireLogin('/user/login');
}
}],
action() {
}
});
userRoutes.route('/login',{
triggersEnter: [(context,redirect) => {
redirectUsers();
}],
action() {
mount(AppCtx, {
content: () => (<Login />)
});
}
});
}
我一直在 /clients/modules/core/libs/
中定义共享函数并在任何地方使用它。当你在 core
模块外使用函数时,我打破了封装,但我还没有找到更好的方法。如果你知道请告诉我。
此外,triggersEnter 中的重定向和身份验证被视为反模式。
这是我的开源 Mantra 应用程序 Vym 中的真实示例。看那里位:
如果您想查看更多内容,可以使用该存储库 here。
您也可以使用此 reusable auth composer 并在组件级别处理身份验证。