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");
}
}//注册