node+vue实现用户注册和头像上传的实例代码


Posted in Javascript onJuly 20, 2017

最近正好空闲,写了个实用注册代码,分享给大家,有需要的朋友可以了解一下

数据库我使用的是MongoDB。

首先做文件上传,要保证协议里面的'Content-Type'为'multipart/form-data'。

注册的步骤:

  1. 将用户名密码,图片等提交给node端
  2. node端将图片保存到服务器,图片路径及注册用户的个人信息保存到mongodb数据库。

项目目录如下,注册功能只是其中的第一步:

node+vue实现用户注册和头像上传的实例代码

前端框架使用的是vue.js,ajax使用的是vue的组件vue-resource。

前端上传代码如下:

<template>
 <div class="signUp">
  <!--<form id="signForm" enctype="multipart/form-data">-->
   <div>
    <label for="username">用户名</label>
    <input type="text" name="username" id="username" placeholder="用户名" v-model="users.username">
    <div v-if="judgeUser">请输入合适的用户名</div>
   </div>
   <div>
    <label for="password">密码</label>
    <input type="text" name="password" id="password" placeholder="密码" v-model="users.password">
    <div v-if="judgePas">请输入符合规范的密码</div>
   </div>
   <div>
    <label for="usernameReply">重复密码</label>
    <input type="text" name="usernameReply" id="usernameReply" placeholder="重复密码" v-model="users.passwords">
    <div v-if="judgePass">两次输入请保持一致</div>
   </div>
  <div>
   <label for="name">昵称</label>
   <input type="text" name="name" id="name" placeholder="昵称" v-model="users.name">
   <div v-if="judgeName">请输入昵称</div>
  </div>
   <div>
    <label for="sex">性别</label>
    <select name="" id="sex" v-model="users.sex">
     <option value="男">男</option>
     <option value="女">女</option>
    </select>
   </div>
   <div>
    <label for="photo">头像</label>
    <input type="file" name="photo" id="photo" @change="onfilechange"> //通过change事件获取到用户所要上传的图片
   </div>
   <div>
    <label for="Pintroduction">个人介绍</label>
    <textarea name="Pintroduction" id="Pintroduction" cols="60" rows="8" v-model="users.Pintroduction"></textarea>
   </div>

   <input type="submit" value="注册" class="submit" @click="submit()">
  <!--</form>-->
 </div>
</template>
<script>
//首先现在组件中引入vue和vue-resourece   
import Vue from 'vue';
import vueRes from 'vue-resource';
//将vue-resourece注册到全局  
Vue.use(vueRes);

export default{
  name:'signUp',
  data(){
    return{
       judgeUser:false,
       judgePas:false,
       judgePass:false,
       judgeName:false,
       users:{
        username:null,
        password:null,
        passwords:null,
        sex:null,
        Pintroduction:null,
        photo:null,
       }
    }
  },
 methods: {
  submit: function () {
   var formdata = new FormData();
   for (var key in this.users) {  //读取data中所要上传的内容循环append到fordata中
    if (key) {
     formdata.append(key, this.users[key])
    }
   }

   this.$http.post('/signup', formdata,{ //通过调取node端定义的接口,切记一定要将请求头中的Content-Type改为multipart/form-data否则node端获取到的将是一个字符串
     headers:{
       'Content-Type':'multipart/form-data'
     }
   })
    .then()
  },
  onfilechange: function (e) { //获取到图片文件
    var files = e.target.files ||     e.dataTransfer.files;
   if (!files.length)return;
   this.users.photo = files[0];
  }
 }

}
</script>

node端接收代码如下:

var express=require('express');
var router = express.Router();
var formidable=require('formidable');//上传功能的插件
var path=require('path');
var fs=require('fs');
var user=require('../models/users');//注册信息插入数据库的方法

router.post('/',function (req,res) {
 var uploadDir='./public/images/';
 var form=new formidable.IncomingForm();
 //文件的编码格式
 form.encoding='utf-8';
 //文件的上传路径
 form.uploadDir=uploadDir;
 //文件的后缀名
 form.extensions=true;
 //文件的大小限制
 form.maxFieldsSize = 2 * 1024 * 1024;
 form.parse(req, function (err, fields, files) {
 //fields上传的string类型的信息
 //files为上传的文件
   var username=fields.username;
   var password=fields.password;
   var passwords=fields.passwords;
   var sex=fields.sex;
   var pintroduction=fields.Pintroduction;
   var name=fields.name;

   var file=files.photo;

   var oldpath =path.normalize(file.path);//返回正确格式的路径

   var newfilename=username+file.name;
   var newpath=uploadDir+newfilename;

   //写入数据库的信息
  var useres={
   username:username,
   password:password,
   sex:sex,
   pintroduction:pintroduction,
   name:name,
  };

  //将老的图片路径改为新的图片路径
  fs.rename(oldpath,newpath,function(err){
   if(err){
    console.error("改名失败"+err);
   }
   else {
    useres.filePath=newpath;
     user.create(useres);
     res.send('注册成功')
   }
  });
 })
});

module.exports = router;
// models/users.js

var User=require('../lib/mongo');
module.exports={

 create:function (useres) {
  User.create(useres);
 }
};
// lib/mongo.js
const moogoose=require('mongoose');


moogoose.connect('mongodb://localhost/myblog');

moogoose.Promise = global.Promise;

const db=moogoose.connection;


// exports.db=db;
// db.once('open',function () {
//
// });

var userSchema=new moogoose.Schema({
  username:{type:'string',unique:true},
  password:{type:'string'},
  sex:{type:'string'},
  pintroduction:{type:'string'},
  name:{type:'string'},
  filePath:{type:'string'}
 },
 {collection:'user'}
);

var user=moogoose.model('user',userSchema);

exports.create=function (useres) {
 new user(useres).save(function (err,data) {
 })
};

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
aspx中利用js实现确认删除代码
Jul 22 Javascript
IE事件对象(The Internet Explorer Event Object)
Jun 27 Javascript
JS Pro-深入面向对象的程序设计之继承的详解
May 07 Javascript
AngularJS HTML编译器介绍
Dec 06 Javascript
JavaScript分页功能的实现方法
Apr 25 Javascript
vue实现todolist功能、todolist组件拆分及todolist的删除功能
Apr 11 Javascript
使用Vue开发自己的Chrome扩展程序过程详解
Jun 21 Javascript
详解JWT token心得与使用实例
Aug 02 Javascript
JS中的算法与数据结构之字典(Dictionary)实例详解
Aug 20 Javascript
js基础之事件捕获与冒泡原理
Oct 09 Javascript
通过原生vue添加滚动加载更多功能
Nov 21 Javascript
JS 数组基本用法入门示例解析
Jan 16 Javascript
深入探究AngularJs之$scope对象(作用域)
Jul 20 #Javascript
通过命令行创建vue项目的方法
Jul 20 #Javascript
基于BootStrap实现简洁注册界面
Jul 20 #Javascript
AngularJS实现的JSONP跨域访问数据传输功能详解
Jul 20 #Javascript
深入探究node之Transform
Jul 20 #Javascript
微信小程序“摇一摇”的实例代码
Jul 20 #Javascript
基于JavaScript实现微信抢红包功能
Jul 20 #Javascript
You might like
深入php中var_dump方法的使用详解
2013/06/24 PHP
php实现的Timer页面运行时间监测类
2014/09/24 PHP
PHP curl伪造IP地址和header信息代码实例
2015/04/27 PHP
php实现将数据做成json的格式给前端使用
2018/08/21 PHP
Cookie跨域问题解决方案代码示例
2020/11/24 PHP
JavaScript null和undefined区别分析
2009/10/14 Javascript
比较详细的关于javascript 解析json的代码
2009/12/16 Javascript
Jquery UI震动效果实现原理及步骤
2013/02/04 Javascript
jquery分页插件AmSetPager(自写)
2013/04/15 Javascript
5款JavaScript代码压缩工具推荐
2014/07/07 Javascript
AngularJS入门教程之多视图切换用法示例
2016/11/02 Javascript
Jquery中.bind()、.live()、.delegate()和.on()之间的区别详解
2017/08/01 jQuery
es6数据变更同步到视图层的方法
2019/03/04 Javascript
JS数组方法push()、pop()用法实例分析
2020/01/18 Javascript
[01:07:21]NAVI vs VG Supermajor 败者组 BO3 第二场 6.5
2018/06/06 DOTA
[02:16]2018年度CS GO最具人气选手-完美盛典
2018/12/16 DOTA
从零学python系列之从文件读取和保存数据
2014/05/23 Python
Python遍历指定文件及文件夹的方法
2015/05/09 Python
快速实现基于Python的微信聊天机器人示例代码
2017/03/03 Python
对pandas进行数据预处理的实例讲解
2018/04/20 Python
python使用Matplotlib绘制分段函数
2018/09/25 Python
python实现将字符串中的数字提取出来然后求和
2020/04/02 Python
浅谈Selenium 控制浏览器的常用方法
2020/12/04 Python
菲律宾旅游网站:Expedia菲律宾
2017/10/11 全球购物
Tory Burch德国官网:美国时尚生活品牌
2018/01/03 全球购物
DTD的含义以及作用
2014/01/26 面试题
什么样的创业计划书可行性高?
2014/02/01 职场文书
《匆匆》教学反思
2014/02/22 职场文书
机械制造毕业生求职信
2014/03/03 职场文书
2014企业领导班子四风对照检查材料思想汇报
2014/09/17 职场文书
服务承诺书
2015/01/19 职场文书
试用期自我评价怎么写
2015/03/10 职场文书
如何写观后感
2015/06/19 职场文书
Java SSM配置文件案例详解
2021/08/30 Java/Android
MySQL连接控制插件介绍
2021/09/25 MySQL
CSS中理解层叠性及权重如何分配
2022/12/24 HTML / CSS