@jameszuo
2016-03-11T11:14:45.000000Z
字数 1471
阅读 366
code-review
Reduck框架底层代码注释较少,需要补充
XSS漏洞可能(1)
// frame.ejs
var serverData = {};
var stepTime = [];
try{
serverData = <%-(data && data.serverData)?JSON.stringify(data.serverData):'{}'%>;
stepTime = <%-(data && data.stepTime)?JSON.stringify(data.stepTime):'[]'%>
}catch(e){
console.error('服务端数据解析错误', e);
}
解决办法:替换 <script> 和 </script>
JSON.stringify(…).replace(/<(\/?)script>/g, '<$1script>')
XSS漏洞可能(2)
变量大小写不规范
// PageViewModel 是类,首字应大写
var pageViewModel = require('reduck-server').PageViewModel;
module.exports = pageViewModel.subclass(function (params) {
变量名不易理解,适当写长一些即可
window.pageView = new pageView({
initEvent: function () { ... },
// 这里的 actions 作用不明确,导致下面的 this 指向产生歧义
actions: {
submit: function (pageView) {
var $btn = $(this).button('正在提交');
解决办法:使用长属性名,如 autoBindActionsAfterRender:
window.pageView = new pageView({
initEvent: function () { ... },
autoBindActionsAfterRender: {
submit: function (pageView) {
var $btn = $(this).button('正在提交');
入口文件自动映射到路由模块,不容易出错
//计算入口文件map
var entryArray = glob.sync(pagePath + "/**/main.js");
前后端复用一套stores和template代码
模块分离很清晰,赞!
module.exports = pageViewModel.subclass(function (params) {
}, {
title: '房间配置',
store: {
channel: require('stores/data-channel'),
gameList: require('stores/data-gameList'),
startLive: require('stores/data-startLive')
}, //配置store数据仓库(DataModelMap)
serverTpl: 'common/frame',
components: {
//string组件
body: '',
//主page
page: require('./component-page'),
//面包屑
breadcrumb: require('components/component-breadcrumb'),
//导航
nav: require('components/component-nav'),
header: require('components/component-header')
}
});