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,如果同为小白我写的哪有漏掉的我们可以相互讨论,一起进步
- STL中的nth_element()方法的使用
- C++queue容器学习(详解)
- 牛客面经 |这可能不只是一篇面经
- 图的基本算法(BFS和DFS)
- C++STL中set的使用策略(详解)
- Codeforces Round #409 (rated, Div. 2, based on VK Cup 2017 Round 2)(A.思维题,B.思维题)
- 设计模式六大原则(1):单一职责原则
- 设计模式六大原则(2):里氏替换原则
- Selenium2+python自动化72-logging日志使用
- Codeforces Round #395 (Div. 2)(A.思维,B,水)
- php实现图形计算器
- Selenium2+python自动化73-定位的坑:class属性有空格
- 华中农业大学第五届程序设计大赛网络同步赛题解
- Java构造方法与析构方法实例剖析
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法