环境准备,安装node.js和mongodb数据库
服务安装包链接:网盘下载地址
提取码:jie6
安装就是傻瓜式操作
1. 创建项目
# 安装全局的代码生成器 npm install express-generator -g # 创建项目(添加ejs的模板引擎) 项目名 express -e project # 安装热部署插件 npm install nodemon -g # vscode打开项目 cd project # 项目初始化 npm install # 使用编辑器打开 code . # 更改项目运行方式 pakage.json "start": "nodemon ./bin/www" # 启动项目 npm start
2. 初始化mongodb
# 指定数据文档生成所在的文件夹
mongod --dbpath "D:\node-code\mongodb\data"
# 创建数据库
use db_project
# 创建集合类(表)
db.createCollection("users")
# 插入一条数据
db.users.insertOne({name: 'ajie'})
# 查看数据
db.users.find()
3. 在node.js中引入mongodb
npm install mongodb --save
在项目中引入
# 1. 在与bin同级的目录创建model 并创建一个index.js的文件
# 2. 在index.js中封装数据库连接的回调函数
//引入MongoDB连接对象
const MongoClient = require('mongodb').MongoClient;
//数据库地址url
const url = 'mongodb://localhost:27017';
//连接的数据库名
const dbname = 'project';
//封装数据库连接的方法 回调函数 返回连接对象
function connect(callback){
MongoClient.connect(url, function(err, client){
if(err) {
console.log('数据库连接失败!',err);
} else {
//得到连接对象
const db = client.db(dbname);
//返回连接对象
callback && callback(db);
//关闭数据库连接
client.close();
}
});
}
//将数据库连接暴露出去
module.exports = {
connect
}
测试是否连接成功
# 在route\index.js中
var express = require('express');
var router = express.Router();
const model = require('../model')
/* GET home page. */
router.get('/', function(req, res, next) {
//测试是否连接成功
model.connect(function(db){
db.collection('users').find().toArray(function(err, doc){
console.log('用户列表:', doc);
res.render('index', { title: 'Express' });
})
})
});
module.exports = router;
登录/注册功能
公共资源head.ejs
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<link rel="stylesheet" href="/stylesheets/style.css"/>
register.ejs
<!DOCTYPE html>
<html lang="en">
<head>
<title>用户注册</title>
<%- include head %>
</head>
<h1>注册页面</h1>
<form action="/users/register" method="POST">
<input type="text" name="username" placeholder="请输入用户名">
<input type="password" name="password" placeholder="请输入密码">
<input type="password" name="password2" placeholder="确认密码">
<input type="submit" value="注册">
</form>
<div>已有帐号?<a href="/login">立即登录</a>!</div>
</html>
login.ejs
<!DOCTYPE html>
<html lang="en">
<head>
<title>用户登录</title>
<%- include head %>
</head>
<h1>注册页面</h1>
<form action="/users/login" method="POST">
<input type="text" name="username" placeholder="请输入用户名">
<input type="password" name="password" placeholder="请输入密码">
<input type="submit" value="登录">
</form>
<div>没有帐号?<a href="/register">立即注册</a>!</div>
</html>
route\index.js
//注册页路由设置
router.get('/register', function(req, res, next) {
res.render('register', {});
});
//渲染登录页
router.get('/login', function(req, res, next) {
res.render('login', {});
});
route\users.js
var express = require('express');
var router = express.Router();
//引入数据库连接对象
const model = require('../model')
/* GET users listing. */
router.get('/', function(req, res, next) {
res.send('respond with a resource');
});
//注册接口
router.post('/register', function(request, response, next){
const data = {
username: request.body.username,
password: request.body.password,
password2: request.body.password2
};
model.connect(function(db){
db.collection('users').insertOne(data, function(err, res) {
if(err){
console.log('注册失败');
response.redirect('/register');
} else {
response.redirect('/login');
}
});
});
});
//登录接口
router.post('/login', (request, response, next) => {
const data = {
username: request.body.username,
password: request.body.password,
};
model.connect((db) => {
db.collection('users').find(data).toArray((err, res) => {
console.log(res);
if(err){
console.log('登录失败');
response.redirect('/login');
} else {
if(res.length > 0) {
response.redirect('/');
}else {
response.redirect('/login');
}
}
});
});
});
module.exports = router;