node项目中的文件上传,和邮箱注册

         node项目考核刚结束,同时自己也发现了自己的一些问题,自己还是基础知识掌握的不是很好,不过就花了3,4天就写出了一个小小项目还是比较有成就感的,学习node.js后让我觉得js还有无限种可能。这个星期学习状态还勉强可以,希望下个星期再接再厉吧!

        记录下写node项目的一些基本功能:

  1.文件上传:

(1)node路由,接口的配置:

//路由配置:
const express = require('express');
const router = express.Router();//创建路由
const multer = require('multer');//引用中间件
const path = require("path");
const storage = multer.diskStorage({
    destination: function (req, file, cb) {
        cb(null, "\public/img");
    },//上传后的文件路径
    filename: function (req, file, cb) {
        let e = file.originalname.split('.')[1];//获取后缀
        const uniqueSuffix = Date.now()
        cb(null, `${uniqueSuffix}.${e}`)
    }//指定文件名
})
const upload = multer({ storage: storage });
//接口配置:
router.post('/api/updataimg', upload.single('img'), (req, res) => {
    let { size, mimetype, path, filename } = req.file;
    let types = ['jpg', 'jpeg', 'png', 'gif'];//格式判断(上传图片的)
    let tmptype = mimetype.split('/')[1];
    if (size > 500000) {
        res.send({ status: 0, msg: '图片上传尺寸过大!' });//传输大小限制
    } else if (types.indexOf(tmptype) == -1) {
        res.send({ status: 0, msg: '图片上传格式错误!' });//格式判断(上传图片的)
    } else {
        let imgurl = `/public/img/${filename}`;
        res.send({ status: 1, msg: '图片上传成功!', url: imgurl });
    }
})
module.exports = router;

 (2)js调用接口:

function checkFile(img) {
    let file = img;
    console.log(img);
    if (file == null || file == "") {
        swal("请选择要上传的文件!");
        return false;
    }
    //定义允许上传的文件类型
    var allow_ext = ".jpg|.png|.gif";
    //提取上传文件的类型
    var ext_name = file.substring(file.lastIndexOf("."));
    //判断上传文件类型是否允许上传
    if (allow_ext.indexOf(ext_name + "|") == -1) {
        swal("该文件不允许上传,请上传" + allow_ext + "类型的文件,当前文件类型为:" + ext_name);
        return false;
    }
}//判断发布格式
function upimg() {
    let formData = new FormData();
    let headname = $('#file')[0].value;
    let ishead = checkFile(headname);
    if (ishead != false) {
        let changemyhead = new Promise((resolve, reject) => {
            formData.append('img', $('#file')[0].files[0]);
            formData.append('id', sessionStorage.getItem("id"));
            resolve();
        });
        changemyhead.then(() => {
            $.ajax({
                // 类型
                type: "POST",
                url: "http://127.0.0.1/api/updataimg",
                data: formData,
                dataType: "json",
                contentType: false,
                processData: false,
                success: function (date) {
                    if (date.status == 1) {
                        swal("上传成功!", '图片上传成功!', "success");
                        changeHead.style.backgroundImage = `url(${date.url})`

                    } else if (date.msg = '图片上传尺寸过大!') {
                        swal("上传失败!", '图片上传尺寸过大!', "error");
                    } else {
                        swal("上传失败!", '图片上传格式错误!', "error");
                    }
                },
                error: function (returndata) {
                    console.log(returndata);
                }
            })
        })
    }
}//上传头像

2.邮箱注册:

(1)node路由的配置:

const nodemailer = require("nodemailer");
// let testAccount = nodemailer.createTestAccount();
let transporter = nodemailer.createTransport({
    host: "smtp.qq.com",
    port: 465,
    secure: true , // true for 465, false for other ports
    auth: {
        user:'2295908251@qq.com', // generated ethereal user
        pass: 'fvvtbvkcyvdmeaha', // generated ethereal password
    },
});
function send(mail,code){
    let info = {
        from: '"阿泽" <2295908251@qq.com>', //  发送人
        to:mail, // 发送地址
        subject: "验证码验证", // Subject line
        text: `您的验证码是:${code},有效期3分钟!`, // plain text body
    };
    return new Promise((res,rej)=>{
        transporter.sendMail(info,function(err,data){
            if(err){
                rej();
            }else{
                res();
            }
        });
    })
}
module.exports = {send};

(2)node接口的配置:

router.post('/api/sendcode', (req, res) => {
    let code = parseInt(Math.random() * 10000);
    mail.send(req.body.email, code)
        .then(() => {
            req.session.code = code;
            res.send({
                status: 1,
                msg: '发送成功!'
            })
        })
        .catch(() => {
            res.send({
                status: 0,
                msg: '发送失败!'
            })
        });
})//发送验证码
router.post('/api/register',(req, res) =>{
    if(req.body.code!=req.session.code){
        return res.send({
            status: 0,
            msg: "验证码错误!",
        });
    }
    User.findOne({
        username: req.body.username
    }).then(function(user){
        if (user) {
            res.send({
                status: 0,
                msg: "用户名已存在!",
            })
        } 
        else {
            return new User(req.body).save();
        }
    }).then(function(ret) {
        if(ret!=undefined){
            res.send({
                status: 1,
                msg: "注册成功!",
                data: ret
            });
            req.session.user=ret;
            req.session.login='1';
        }
    })
    .catch((err)=>{
        res.send({
            status: 0,
            msg: "注册失败!",
        });
    })
})//用户注册

 (3)js调用接口:

function getcode() {
    let email= emailtext.value;
    if (email == '') {
        swal("请求失败!", '请输入您的邮箱!', "error");
    } else {
        var mailLimit = /^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/;
        var mailJudge = mailLimit.test(email);
        if (mailJudge == true) {
            $.post('http://127.0.0.1/api/sendcode',
                { "email": email },
                function (date) {
                    if (date.status == 1) {
                        swal("验证码发送成功!");
                        curCount = 60;   //设置button效果,开始计时
                        codebutton.innerHTML = "验证码(" + curCount + ")" ;
                        codebutton.onclick=null;
                        InterValObj = window.setInterval(SetRemainTime, 1000);
                    } else {
                        swal("验证码发送失败!");
                    }
                })
        } else {
            swal("请求失败!", '请输入正确格式的邮箱!', "error");
        }
    }
}//发送验证码
function reg() {
    let username = regname.value;
    let password = regpass.value;
    let code =  document.getElementById('code').value;
    let email= emailtext.value;
    if (username != ''&& password!= '' &&code!= '' &&email!= '') {
        $.post('http://127.0.0.1/api/register',
            { "username": username, "password": password ,"email":email,"code":code},
            function (date) {
                if(date.status==1){
                    swal("注册成功!", '你成功的注册了该账号!', "success");
                    sessionStorage.setItem("userid", date.data._id);
                    setTimeout(function () {
                        window.location.assign("http://127.0.0.1/");
                        sessionStorage.setItem("tousers", '1');
                    }, 1000)
                }else if(date.msg== '验证码错误!') {
                    swal("注册失败!", '验证码输入错误!', "error");
                } else if(date.msg== '用户名已存在!') {
                    swal("注册失败!", '你要注册的用户名已存在!', "error");
                }else{
                    swal("注册失败!", '你的注册失败!', "error");
                }
            })
    } else {
        swal("注册失败!", '请输入完整信息!', "error");
    }
}//注册

结束!

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿泽不会飞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值