nodejs连接项目MongoDb数据库

时间:2019-02-16
本文章向大家介绍nodejs连接项目MongoDb数据库,主要包括nodejs连接项目MongoDb数据库使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

渣渣鹏的前端之路

目标:完成一个注册页面,注册成功后跳转到登录页面
大致框架搭建好,注册、登录、导航条写好并成功实现跳转,给电脑安装好MongoDb数据库。(这个我在这就不多废话了)

1.首先安装好我们的mongoose

-----npm install mongoose  (当然cnpm也行)

2.在我们需要使用的地方引入

----const mongoose=require("mongoose")

3.连接数据库

mongoose.connect(“mongodb://localhost/node-app”)
.then(()=>{
console.log(“MongoDB connect success…”);
})
.catch(err =>{
console.log(err);
})

这时运行我们的nodemon app.js会显示连接成功;

4.接下来就是我们数据的插入啦

  • 首先在根目录下创建数据库的模型
  • 创建一个models文件夹,再创建一个User.js这个里面写我们要插入的数据
直接上代码好了
//引入mongoose
const mongoose=require("mongoose");
//使用Schema
const Schema=mongoose.Schema;
//具体要存储的数据
const UserSchema = new Schema({
	name:{
		type:String,
		required:true
	},
	email:{
		type:String,
		required:true
	},
	password:{
		type:String,
		required:true
	},
	
	date:{
		type:Date,
		default:Date.now
	}
})
//外部真正调用时需要使用的
mongoose.model('users',UserSchema);

接下来在我们的路由中引入        
提醒:body-parser中间件是用来获取我们表单数据的一定不能省略,
const express = require("express");
const mongoose=require("mongoose");
const bodyParser=require("body-parser");
const router=express.Router();


//引入模型
require("../models/User");
const User=mongoose.model("users");



//body-parser middleware
const jsonParser = bodyParser.json();
const urlencodedParser = bodyParser.urlencoded({ extended: false });

//连接登录
router.get("/users/login",(req,res)=>{

	res.render("users/login");
	
})

//连接注册
router.get("/users/register",(req,res)=>{

	res.render("users/register");
})

router.post("/users/register",urlencodedParser,(req,res)=>{
	//存储数据的过程
	const newUser={
			name:req.body.name,
			email:req.body.email,
			password:req.body.password
		}
		new User(newUser)
		.save()
		.then((user)=>{
//			req.flash("success_msg","数据添加成功!");
			console.log("数据写入成功!")
//			相当于进入到ideas文件夹下的index页面
			res.redirect('/users/login')
   	})
})


module.exports=router;

在我们的app.js中引入路由模块并使用
//load router
const users=require('./routes/users');


app.use(users);
这时我们的数据插入应该算是完成了,我们可以直接进入数据库中进行查看我们插入的数据。
当然这里只是要把表单中的数据插入到数据库中,如果我们正常的正常的注册,一定要在后台判断用户的输入是否规范、用户名是否存在、然后将密码进行加密再存储至数据库等操作。
顺便附上我的register的代码
<div class="row">
	<div class="col-md-6 mx-auto">
		<div class="card card-body">
			<!--<img src="/image/logo.jpg" class="logo"/>-->
			<h3 class="text-center">注册</h3>
			<form action="/users/register" method="post">
				<div class="form-group">
					<lable for="username">用户名</lable>
					<input type="text" value="{{name}}" class="form-control" name="name" required />
				</div>
				<div class="form-group">
					<lable for="email">邮箱</lable>
					<input type="email" value="{{email}}" class="form-control" name="email" required />
				</div>
				<div class="form-group">
					<lable for="password">密码</lable>
					<input type="password" value="{{password}}" class="form-control" name="password" required />
				</div>
				<div class="form-group">
					<lable for="password">确认密码</lable>
					<input type="password" value="{{password2}}" class="form-control" name="password2" required />
				</div>
				<input type="submit" class="btn btn-primary" value="注册"/>
			</form>
		</div>	
	</div>
</div>
增加了简单验证的注册代码
const express = require("express");
const mongoose=require("mongoose");
const bodyParser=require("body-parser");
const bcrypt = require('bcrypt');
const passport = require("passport");

const router=express.Router();

//加载models
require("../models/User");
const User=mongoose.model("users");


//body-parser middleware
const jsonParser = bodyParser.json();
const urlencodedParser = bodyParser.urlencoded({ extended: false });

//users login & register
router.get("/login",(req,res)=>{
	res.render("users/login");	
})

router.post("/login",urlencodedParser,(req,res,next)=>{
		
	passport.authenticate('local',{
		successRedirect:'/ideas',
		failureRedirect:'/users/login',
		failureFlash:true
	})(req,res,next)
	
})





router.get("/register",(req,res)=>{
	res.render("users/register");	
})

//点击注册后进入的路由
router.post("/register",urlencodedParser,(req,res)=>{
//	console.log(req.body);
//	res.send("register");
//	后台验证密码是否一致
	let errors=[];
	
	if(req.body.password != req.body.password2){
		errors.push({
			text:"两次密码输入不一致!"
		})
	}
	
	if(req.body.password.length<6){
		errors.push({
			text:"密码长度不得小于6位!"
		})
	}
	
	if(errors.length>0){
		res.render('users/register',{
			errors:errors,
			name:req.body.name,
			email:req.body.email,
			password:req.body.password,
			password2:req.body.password2
		})
	}else{
		
			//判断邮箱是否已经被注册
			User.findOne({email:req.body.email})
			 .then((user)=>{
			 	if(user){
			 		req.flash("error_msg","邮箱已经存在,请更换邮箱注册");
			 		res.redirect('/users/register');
			 	}else{
			 		const newUser= new User({
						name:req.body.name,
						email:req.body.email,
						password:req.body.password
					})
			 		
			 		bcrypt.genSalt(10, (err, salt)=> {
					    bcrypt.hash(newUser.password, salt, function(err, hash) {
					        if(err) throw err;
					        newUser.password=hash;
					        
					        newUser.save()
							.then((user)=>{
								req.flash("success_msg","注册成功!");
								res.redirect('/users/login')
							}).catch((err)=>{
								req.flash("success_msg","账号注册失败!");
								res.redirect('/users/register')
							});
					        
					    });
					});	 				 		
			  }
		 })
	}
})

router.get("/logout",(req,res)=>{
	req.logout();
	req.flash("success_msg","退出成功!");
	res.redirect("/users/login");
	
})


module.exports=router;


本人菜鸡一枚,刚接触nodejs,如果同为小白我写的哪有漏掉的我们可以相互讨论,一起进步