用mongoose数据库进行操作,首先要定义schema,如下:db.js
const mongoose = require('mongoose')
mongoose.connect('mongodb://localhost/test')
const db = mongoose.connection
db.once('error',() => {
console.log('mongo connection error')
})
db.once('open', () => {
console.log('mongo connection successed')
})
const LoginShema = mongoose.Schema({
account: String,
password: String
})
const Models = {
Login : mongoose.model('Login', LoginShema)
}
module.exports = Models
其次写入口文件index.js
// 引入编写好的api
const api = require('./api');
// 引入文件模块
const fs = require('fs');
// 引入处理路径的模块
const path = require('path');
// 引入处理post数据的模块
const bodyParser = require('body-parser')
// 引入Express
const express = require('express');
const app = express();
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: false}));
app.use(api);
// 访问静态资源文件 这里是访问所有dist目录下的静态资源文件
app.use(express.static(path.resolve(__dirname, '../dist')))
// 因为是单页应用 所有请求都走/dist/index.html
app.get('*', function(req, res) {
const html = fs.readFileSync(path.resolve(__dirname, '../dist/index.html'), 'utf-8')
res.send(html)
})
// 监听8088端口
app.listen(8088);
console.log('success listen…………');
最重要的是api里的逻辑,注册部分首先要查询所给account是否存在于数据库中,存在则不能注册,不存在则可以注册,注册时,将密码md5方式加密,分别用find和save方法,如下:
"use strict";
const models = require('./db');
const express = require('express');
const router = express.Router();
const crypto = require('crypto')
/************** 创建(create) 读取(get) 更新(update) 删除(delete) **************/
// 创建账号接口
router.post('/api/login/createAccount',(req,res) => {
// 检查是否存在该用户
let testAccount = {account:req.body.account};
let errorInfo = {}
models.Login.find(testAccount, function (err, detail) {
console.log(detail)
// 若存在用户则不能注册,返回403
if (detail.length) {
errorInfo = JSON.stringify({code:0, msg:"用户名重复\n"})
res.writeHead(403, {'Content-Type': 'text/plain;charset=utf-8'})
res.end(errorInfo)
console.log(errorInfo)
}else{
// 否则保存数据newAccount数据进mongoDB
let newAccount = new models.Login({
account : req.body.account,
password : getMD5Password(req.body.password)//密码进行md5加密
});
newAccount.save((err,data) => {
if (err) {
res.send(err);
console.log(err)
} else {
res.writeHead(200, {'Content-Type': 'text/plain;charset=utf-8'})
res.end(JSON.stringify({code:1,msg:'createAccount successed'}));
console.log('createAccount successed')
}
});
}
})
});
/***************************utils***********************************/
function getMD5Password(content) {
var md5 = crypto.createHash('md5');//定义加密方式:md5不可逆,此处的md5可以换成任意hash加密的方法名称;
md5.update(content);
var d = md5.digest('hex'); //加密后的值d
return d;
}
module.exports = router;
网友评论