最近写项目,越发觉得php累赘,就开始学习nodejs,最开始找到的就是这个开源的社区,看了一下源码布局,觉得和php有的拼了,就放弃了。然后尝试直接用express和其他几个module做了自己的第一个项目,火星问答,求大家吐槽。
终于受不了备案的摧残了,买了linode在东京的vps,现在测试速度还可以
更新:
火星问答最初版发布后,意外的受到很多人喜欢,不知不觉此项目已经走过100多天了,把最新进展update一下吧
1、完善了答题基本功能,并适配到pc、webapp、qq开放平台等多种平台 2、积累了更多有意思、有营养的题目 3、增加了很多辅助功能,比如:站内通信、勋章奖励 4、推出新的答题方式:极限30秒
更新:
上线一个关键栏目 火星人:用户可以根据兴趣和爱好经营自己的题库,查看和管理谁在答自己题,谁喜欢自己的题,谁的成绩最好;答题人可以选择喜欢的题库和人进行跟进,希望此功能能让臭味相投的人形成自己的圈子。
文件上传使用 express 很简单啊,直接form post,用express里的bodyparse 解析就可以了,当然这个项目里用到了ajax方式,在前端使用了 jquery.form 插件,然后用js控制提交文件,后台接收处理后返回json格式结果供前台处理
呵呵,不是不想共享,因为这是学习nodejs的首个项目,现在结构和代码都比较笨拙,里面也没有必要的代码诠释,怕误人子弟,而且代码公开后,可能会暴露N多漏洞,害人害己啊。过段时间完善和稳定了,整理一下发上去。
除了创意,bootstrap网站风格不错,其他很多设计架构方面还是业余啊,例如前台:javascript规范,后台:接口设计规范,数据安全等… 你的答案我全部都能看的到,我写了一个智能答题的东西,完全无脑// 另外缺少推送.题目设计也太差,你可以参考我很久之前弄的这个题目设计风格:http://202.175.189.115/ers_survey/home/public/#survey-edit?id=2
多谢提醒。请问一下,答案如何看到的?至于规范类的东西,因为是个人开发,怎么方便怎么来。你说的缺少推送是指什么?手机推送?你的那个题目设计看了,很厉害,只是太专业的样子,作为工程师觉得很完善,但是面向用户使用,不知道他们什么感受了
@cicada 我说的推送是用户自定义感兴趣的话题进行回答,可以推送到手机,当然也可以推送到web平台中,答案我是怎么获取的,其实很简单,比如你有一个这样的题目http://www.huoxingwenda.com/question/8311389841431.html 答案:http://www.huoxingwenda.com/question/answer?question=8311389841431&answer=hxa&time=1 只要把question的值改成相应的问题就可以了 另外你的js我也有看过,安全性根本没有,哈哈… function answer(){ // if(!isLogin()) return; var $btn=$(this); if($btn.hasClass(‘disabled’)){ return; } var $input=$(‘#answerinput’); var question=$input.attr(‘data-my’); var myanswer=$input.val(); var getanswer=false; if($.trim(myanswer) ===’’){ return; }else if(myanswer === “hxa”){ getanswer=true; }
var time=$(‘#countup’).length>0?$(‘#countup’).countup(‘time’)[0]:0; if(getanswer){ time=300; } $btn.addClass(‘disabled’); var url=’/question/answer’; $.getJSON(url,{question:question,answer:myanswer,time:time},function(res){
var $box=$btn.parents(‘#answerbox’); var $alist=$box.find(‘.answerlist’); if($alist.length === 0){ $alist=$('
'); $box.append($alist); } $alist.find(‘.alert’).remove(); var markup=’’; if(res.state==’ok’){ updateUserScore(); if(res.message.state===1){ if(getanswer){ myanswer=res.message.answer.split(" || ")[0]; } if($(‘#countup’).length>0) $(‘#countup’).countup(‘stop’); markup=’‘+myanswer+’ ‘; var minute=Math.floor(time/60); var second=time-minute*60; minute=minute===0?’’:minute+’ 分’; second=second+’ 秒’; var imessage=’恭喜你,回答正确,你共用时’+minute+second+"。"; if(getanswer){ imessage="查看答案及解释,此题累计减分"+res.message.score+’ 分。’; }else if(res.message.score!==null){ imessage+="此题累计获得 "+res.message.score+’ 分。’; }else if(!loginState){ imessage+="你尚未登录,登录用户可获得更多功能。"; } if(res.message.honor && res.message.honor.length>0){ var myhonor=res.message.honor, honorName="",honorImg="",idx; for(idx=0;idx<myhonor.length;idx++){ honorName+=’ "’+HONORS[myhonor[idx]].name+’"’; honorImg+=’ ‘; } imessage+=’你赢得了’+honorName+’ 勋章 '+honorImg; } var answertip=res.message.answertip || ‘无’; imessage+=’} }); }
@cicada 另外我说的那种智能题目设计那样做的目的是我之前参考国外最先进的题目设计思路研发的,只是建议,因为很多人可以同时设计同一类型的题目,我之前那样做是为了及时性,不然像你那样就达不到那样的效果.只能一道题一道题的编辑.
@ym1623 哈哈,多谢你的认真,你说的获取答案的方式我开始设计时就知道的,之所以还这么设计是有其他方面的考虑,而且真要封堵这个漏洞,我后台再进行一次校验就可以解决,现在校验是在前台。如果能让工程师们看到开心,我也很开心啊。对安全性来说,这个项目基本没有考虑,否则我稍微混淆一下代码,就会加大解读难度,一个娱乐项目,让大家开心的,干嘛搞的像防贼啊。而且如果你持续使用此方法获得答案,后续对此帐号的副作用很快就会显现。