整理接口
router文件
index.js (入口文件)
const {
express,
Router,
json,
urlencoded
} = require("express");
const router = Router();
const cors = require("../filter/cors");
router.use(json(), urlencoded())
router.use(cors);
const session = require('express-session');
const goods = require("./goods");
const library = require("../router/library")
const vcode = require("./vcode");
const token = require("../utils/token");
const login = require("./login")
const order = require("./order")
const muser = require("./muser")
const sendSms = require("./sendSms")
const {
formatData
} = require("../utils/tools");
router.use(session({
secret: 'fqniu',
resave: false,
saveUninitialized: true,
cookie: {
maxAge: 1000 * 60 * 60 * 2
}
}))
router.use("/goods", goods);
router.use("/library", library);
router.use("/vcode", vcode)
router.use("/login", login)
router.use("/order", order)
router.use("/muser", muser)
router.use("/sendSms",sendSms)
router.get("/jwtverify", (req, res) => {
const {
authorization
} = req.query;
if (token.verify(authorization)) {
res.send(formatData())
} else {
res.send(formatData({
code: 0
}))
}
})
module.exports = router;
sendSms.js(短信接口)
const Core = require('@alicloud/pop-core');
const express = require('express');
const router = express.Router()
const {
formatData
} = require('../utils/tools')
router.get('/:PhoneNumbers', (req, res) => {
const {
PhoneNumbers
} = req.params
let randomNum = (parseInt((Math.random() * 9900) + 100)).toString();
randomNum = randomNum.padStart(4, '0');
const TemplateParam = `{"code":${randomNum}}`
req.session.Sms = randomNum
var client = new Core({
accessKeyId: 'xxLTAI4G2vNjhrGTESjtA9axB6xxx',
accessKeySecret: 'xxQFNGnTnhvR5P1GDMZFz9ahFPm6zWwmxxx',
endpoint: 'https://dysmsapi.aliyuncs.com',
apiVersion: '2017-05-25'
});
var params = {
"RegionId": "cn-hangzhou",
"PhoneNumbers": PhoneNumbers,
"SignName": "xxx",
"TemplateCode": "SMS_201715882",
"TemplateParam": TemplateParam
}
var requestOption = {
method: 'POST'
};
client.request('SendSms', params, requestOption).then(() => {
res.send(formatData(1001));
}, (ex) => {
console.log(ex);
})
})
module.exports = router;
vcdoe.js(图形验证码)
const express = require("express");
const router = express.Router()
const svgCaptcha = require("svg-captcha");
const {
formatData
} = require("../utils/tools");
router.get("/", async (req, res) => {
const options = {
noise: 3,
ignoreChars: '0o1il',
background: '#58bc58',
color: true,
fontSize: 50,
height: 54
}
var captcha = svgCaptcha.create();
req.session.vcode = captcha.text.toLowerCase();
res.send(formatData({
data: captcha.data
}));
})
module.exports = router;
upload.js(上传图片)
const express = require('express');
const router = express.Router();
const multer = require('multer');
const path = require('path');
const mongo = require('../utils/mongo');
const {
formatData,
md5
} = require('../utils/tools')
let storage = multer.diskStorage({
destination: path.join(__dirname, '../public/uploads/'),
filename: function (req, file, cb) {
let ext = path.extname(file.originalname);
cb(null, file.fieldname + '-' + Date.now() + ext);
}
})
const uploadMiddleware = multer({
storage
});
router.post('/avatar', uploadMiddleware.single('avatar'), (req, res) => {
console.log('file=', req.file, req.body);
const {
_id
} = req.body;
const avatarUrl = '/uploads/' + req.file.filename
mongo.update('user', {
_id
}, {
$set: {
avatarUrl
}
})
res.send(formatData({
data: {
_id,
avatarUrl
}
}));
})
router.post('/goods', uploadMiddleware.array('goods', 5), (req, res) => {
})
module.exports = router;
增删改查
login.js (用户登录 查)
const express = require("express");
const router = express.Router();
const crypto = require('crypto');
const {
formatData,
md5
} = require("../utils/tools")
const mongo = require("../utils/mongo")
const token = require("../utils/token")
router.post("/", async (req, res) => {
let {
username,
password,
} = req.body;
console.log("登录参数", username, password)
let {
result
} = await mongo.find("m-user", {
username,
password
})
if (result.length > 0) {
const authorization = token.create({
username
})
result = result[0];
result.authorization = authorization;
console.log(result);
res.send(formatData({
data: result
}))
} else {
res.send(formatData({
code: 0
}))
}
})
module.exports = router;
reg.js (用户注册)
const express = require('express');
const router = express.Router();
const {formatData,md5} = require('../utils/tools');
const mongo = require('../utils/mongo');
router.post('/',async (req,res)=>{
let {username,password} = req.body;
console.log('password=',password)
password = md5(password)
let result
try{
result = await mongo.insert('user',{username,password});
res.send(formatData());
}catch(err){
res.send(forMatData({code:0}))
}
})
router.get('/check',async (req,res)=>{
const {username} = req.query;
const result = await mongo.find('user',{username});
if(result.length>0){
res.send(formatData({code:0}))
}else{
res.send(formatData())
}
})
module.exports = router;
user.js (用户增删改)
const express = require('express');
const router = express.Router();
const mongo = require('../utils/mongo');
const {
formatData
} = require('../utils/tools');
router.put('/:username', async (req, res) => {
let {
username
} = req.params;
console.log("修改用户", req.params)
try {
let {
result
} = await mongo.find('m-user', {
username: username
}, {
field: {
password: false
}
});
if (result.length === 0) {
res.send(formatData({
msg: "用户不存在"
}))
return false
}
} catch (e) {
console.log('err=', err);
res.send(formatData({
msg: "用户的存在问题"
}))
}
let {
password,
} = req.body;
let newData = {}
if (password) {
newData.password = password
}
try {
await mongo.updata('m-user', {
username: username
}, {
$set: newData
});
res.send(formatData({
msg: "修改成功"
}))
} catch (err) {
console.log('err=', err);
res.send(formatData({
msg: "修改失败"
}))
}
})
router.get('/find', async (req, res) => {
const {
username,
vcode
} = req.query;
if (vcode !== req.session.vcode) {
res.send(formatData({
code: 10
}))
return;
}
let {
result
} = await mongo.find('m-user', {
username: username
}, {
field: {
password: false
}
});
console.log("用户", result)
if (result.length !== 0) {
res.send(formatData({
msg: 1
}));
} else {
res.send(formatData({
msg: 0
}));
}
})
router.post('/', async (req, res) => {
let {
username,
password,
} = req.body;
try {
const result = await mongo.insert('m-user', {
username,
password
});
if (result.length !== 0) {
res.send(formatData({
msg: "添加成功"
}));
}
} catch (err) {
res.send(formatData({
msg: "添加失败"
}));
}
})
router.get('/:username', async (req, res) => {
const {
username
} = req.params;
console.log(username)
let {
result
} = await mongo.find('m-user', {
username: username
}, {
field: {
password: false
}
});
console.log(result)
if (result.length !== 0) {
res.send(formatData({
msg: 1
}));
} else {
res.send(formatData({
msg: 0
}));
}
})
module.exports = router;
utils文件下
mongo.js (数据库的增删改查)
const {
MongoClient,
ObjectId
} = require("mongodb");
const url = 'mongodb://localhost:27017';
const dbName = 'ali-novel';
async function connect() {
const client = await MongoClient.connect(url);
const db = client.db(dbName);
return {
client,
db
}
}
async function find(cloName, query = {}, options = {}) {
let {
db,
client
} = await connect();
let collection = db.collection(cloName);
const datalen = await collection.count().then(data => data)
let result = collection.find(query, {
projection: {
password: false
}
});
if (query._id && typeof query._id === 'string') {
query._id = ObjectId(query._id);
}
if (options.skip) {
result = result.skip(options.skip)
}
if (options.limit) {
result = result.limit(options.limit)
}
if (options.sort) {
let key, val;
key = options.sort[0];
if (options.sort.length > 1) {
val = options.sort[1] * 1;
} else {
val = -1;
}
result = result.sort({
[key]: val
})
}
if (query.name) {
const font = query.name
let result = collection.find({
'name': {
'$regex': font,
"$options": 'i'
}
});
result = await result.toArray();
return {
result
};
}
if (query.orderNum) {
const font = query.orderNum
let result = collection.find({
'orderNum': {
'$regex': font,
"$options": 'i'
}
});
result = await result.toArray();
return {
result
};
}
async function queryName(query, params) {
const font = params
for (var key in query) {
queryCheck = key
}
let result = collection.find({
queryCheck: {
'$regex': font,
"$options": 'i'
}
});
result = await result.toArray();
return result;
}
result = await result.toArray();
client.close();
return {
result,
datalen
}
}
async function insert(colName, data) {
let {
db,
client
} = await connect()
const collection = db.collection(colName);
const result = await collection[Array.isArray(data) ? "insertMany" : "insertOne"](data);
client.close();
return result
}
async function remove(colName, query) {
let {
db,
client
} = await connect()
if (query._id && typeof query._id === 'string') {
query._id = ObjectId(query._id);
}
else if (query._id.$in.length >= 1)
query._id.$in = query._id.$in.map(item => {
if (item && typeof item === 'string') {
item = ObjectId(item);
}
return item
})
console.log("我是mongo", query);
let collection = db.collection(colName);
let result = await collection.deleteMany(query);
client.close();
return result;
}
async function updata(colName, query, newData) {
let {
db,
client
} = await connect();
let collection = db.collection(colName);
if (query._id && typeof query._id === 'string') {
query._id = ObjectId(query._id);
}
let result = await collection.updateMany(query, newData);
return result;
}
module.exports = {
insert,
find,
remove,
updata
}
token.js (token的创建和校验)
const jwt = require('jsonwebtoken');
const privateKey = 'fqniu';
function create(data = {}, expiresIn = '2h') {
const token = jwt.sign({
...data
}, privateKey, {
expiresIn
});
return token;
}
function verify(token) {
let result;
try {
jwt.verify(token, privateKey);
result = true;
} catch (err) {
result = false
}
return result;
}
module.exports = {
create,
verify
}
tools.js(封装工具函数)
const crypto = require('crypto');
function formatData({
code = 1,
data = [],
msg = 'success',
datalen = "",
kucun = ""
} = {}) {
if (code === 0) {
msg = 'fail';
}
return {
code,
data,
msg,
datalen,
kucun
}
}
function md5(data, privateKey = 'fqniu') {
const hash = crypto.createHash('md5');
hash.update(data + privateKey);
const result = hash.digest('hex');
return result;
}
module.exports = {
formatData,
md5
}