Javascript 流星与咒语。交叉关注点
我正在开发应用程序在流星与咒语。这是Javascript 流星与咒语。交叉关注点,javascript,meteor,jsx,cross-cutting-concerns,Javascript,Meteor,Jsx,Cross Cutting Concerns,我正在开发应用程序在流星与咒语。这是用户模块的routes.jsx。我希望能够在其他模块的操作和路由中使用requireLogin和redirectUsers。或者一般来说,我如何在不违反mantra架构的情况下处理交叉关注点 import React from 'react'; import {mount} from 'react-mounter'; import Login from './containers/login'; import Register from './contain
用户
模块的routes.jsx。我希望能够在其他模块的操作和路由中使用requireLogin
和redirectUsers
。或者一般来说,我如何在不违反mantra架构的情况下处理交叉关注点
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 />)
});
}
});
}
从“React”导入React;
从'react mounter'导入{mount};
从“./containers/Login”导入登录名;
从“./容器/寄存器”导入寄存器;
从“/client/modules/core/components/App.jsx”导入应用程序;
导出默认函数(injectDeps,{FlowRouter,Meteor,LocalState}){
让userRoutes=FlowRouter.group({
前缀:'/user',
名称:'user'
});
const AppCtx=注入deps(App);
常量重定向用户=()=>{
if(Meteor.userId()){
const path=LocalState.get('INTERRUPTED\u REQUEST\u path')
?LocalState.get('INTERRUPTED_REQUEST_PATH'):'/joke/';
FlowRouter.go(路径);
返回;
}
}
const requireLogin=(路径)=>{
如果(!Meteor.userId()){
set('INTERRUPTED\u REQUEST\u PATH',PATH);
go('/user/login');
返回;
}
}
userRoutes.route(“/”{
triggersEnter:[(上下文,重定向)=>{
如果(!Meteor.userId()){
requireLogin('/user/login');
}
}],
行动(){
}
});
userRoutes.route(“/login”{
triggersEnter:[(上下文,重定向)=>{
重定向用户();
}],
行动(){
挂载(AppCtx,{
内容:()=>()
});
}
});
}
我一直在/clients/modules/core/libs/
中定义共享函数,并在任何地方使用它。当您在核心
模块之外使用函数时,我破坏了封装,但我没有找到更好的方法。如果你知道的话,请告诉我
此外,triggersEnter中的重定向和身份验证被视为反模式
下面是我的开源Mantra应用程序中的一个真实例子。见以下几点:
您也可以使用它并在组件级别上处理身份验证。谢谢,我认为在composer函数中放置横切逻辑并在需要时使用它进行组合是一种非常好的方法。但是操作级别呢?例如,每个用户都可以查看组件,但只有登录的用户才能执行X和Y操作