一个投票系统毕业设计的小总结

express cyanprobe 4年前 (2016-06-05) 3363次浏览 已收录 2个评论

一个投票系统:

前几天在贴吧有人带价求做一个投票APP,1200不多,但是忙活了将近9天晚自习。在这里总结一下。PS:由于没认真写,很多不规范。

总结:

邮件认证:
上次说到那个加密模块解密模块,思路是利用mongodb的ttl索引,认证成功将原来的date更改为1(非时间字段)结束索引从而在24小时内保留用户。

var Nodemailer=require('nodemailer');
var jade=require('jade');
/**
 * 验证连接生成
 * @ re {param} email -收件人地址
 * @ secreatKey {param} -加密标记
 * @name @ {param}-用户名
 * @ callback (error,info)-错误信息,response
 */
function mailer(re,secretKey,name){
     this.to=re,
     this.secretKey=secretKey,
     this.name=name
}
module.exports=mailer;
mailer.prototype.sendProveMail = function (callback) {
    var That = this;
    var date = new Date();
    var JadeByHtml = {
        secret: this.secretKey,
        name: this.name,
        time: date.getFullYear() + "-" + (date.getMonth() + 1) + "-" + date.getDate() + "-" + date.getHours() + ":" + (date.getMinutes() < 10 ? '0' + date.getMinutes():+date.getMinutes())
    }
    var pro = new Promise(function (resolve, reject) {
//教给渲染引擎来做
        jade.renderFile('views/mailer/prove.jade', JadeByHtml, function (error, html) {
                resolve(html)
            }
        )
    });
    pro.then(function (html) {
        var transporter = Nodemailer.createTransport({
            host: 'smtp.163.com',
            secureConnection: true,
            port: 25,
            auth: {
                user: '1318175619@163.com',
                pass: 'asd123456'
            }
        });
        var mailOptions = {
            secureConnection: true,
            from: "DDH <13181726619@163.com>", // sender address
            to: That.to, // list of receivers
            subject: 'DDH邮件账户认证 ✔', // Subject line
            //   text: '邮件激活认证✔', // plaintext body
            html: html// html body
        };
        transporter.sendMail(mailOptions, function (error, info) {
            console.log(error, info);
            if (error) {
                callback(error, null);
            } else {
                callback(null, info.response);
            }
        })
    })
}

Schema定义:

var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var testSchema = new Schema({
    id: { type: String },
    userid:{type:String},
    title:{type:String},
    info:{type:String},
    date:{type: Date,default: Date.now},
//投票选项[{value}]
    content:[],
//已投票人员
    finish:[],
    view:{type:Number,default:0}
}, {
    versionKey: false
});
//关联voting表
mongoose.model('Voting', testSchema, 'voting');

dbsch
插入1次用户投票

Voting.update({"id":tableid,"content.valueName":option},{$inc:{"content.$.count":1}},{$push:{finish:user}}fun()=>{})

不定选项的后台录入:
选项可能是2个,可能是3个,可能是4个,上限9个。这么说的话:前端按照规则命名input1..input2..

exports.posttable=function(req,res){
  var arr=[];
  for(i=1;i<=9;i++){
    if(req.body["input"+i]!=undefined){
      arr.push(req.body["input"+i]);
    }else{
      break;
    }
  }
  var rearr=[];
  for(var i=0;i<arr.length;i++)
  {  var json = {};
    json['valueName']=arr[i];
    json['count']=0;
    rearr.push(json)
  }
  var table={
    id:Date.now(),
    userid:req.session.user,
    title:req.body.title,
    info:req.body.info,
    content:rearr
  };
  //入库存档
  pvoting.posttable(table,function(error,doc){
   //option渲染
    res.render('postvote',{option:doc.centent,user:req.session.user})
  })
};

剩下的无非就是页面渲染逻辑(PS:前端有人给写),数据库的更改,然后开了delete的路由,查看投票和管理投票的路由和数据操作。

效果:

PS:感谢我的前端队友,虽然我还要自己写渲染逻辑。
mojitoupiao mojitoupiao QQ截图20160605101549


CyanProbe , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:一个投票系统毕业设计的小总结
喜欢 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
(2)个小伙伴在吐槽
  1. 好作品,膜拜大触,网上好像投票系统很少的样子,基本都依赖微信投票了
    慕若曦2016-07-15 16:18 回复
    • cyanprobe
      只是帮人做毕业设计,其实主流投票平台,还是磐石网
      凶恶的方块2016-07-20 10:17 回复