1.在项目文件以外创建api文件夹,用来存放有关接口的文件
2.在api文件夹中创建module文件夹,用来存放各种方法和模块
#### 常用工具1:对数据库的操作 db.js
先下载mongodb:npm install mongodb -S
//*************************对数据库的操作模块**************************
//**************************************************************************
//引入必要的模块
const mongodb = require("mongodb");
const mongoClient = mongodb.MongoClient;
//连接数据库
function _connect() {
return new Promise((resolve,reject)=>{
mongoClient.connect("mongodb://127.0.0.1",{ useUnifiedTopology: true},function (err,client) {
if(err) reject(err);
else resolve(client.db("1921"))
})
})
}
/*
* 插入一条数据
* collName:集合名
* insertObj:插入的数据
* */
module.exports.insertOne = async function (collName,insertObj={}) {
const db = await _connect();
return new Promise((resolve,reject)=>{
db.collection(collName).insertOne(insertObj,(err,results)=>{
if(err) reject(err);
else resolve(results);
})
})
}
/*
* 根据条件获得文档的数量
* collName:集合名
* whereObj:条件
* */
module.exports.count = async function (collName,whereObj={}) {
const db = await _connect();
return new Promise((resolve,reject)=>{
db.collection(collName).countDocuments(whereObj).then(count=>{
resolve(count);
})
})
}
/*
* 查找多条数据
* collName:集合名
* whereObj:查找条件
* skip:跳过的文档数
* limit:显示的文档数
*sortObj:排序对象
* */
module.exports.find = async function (collName,{whereObj={},skip=0,limit=0,sortObj={}}) {
const db = await _connect();
return new Promise((resolve,reject)=>{
db.collection(collName).find(whereObj).limit(limit).skip(skip).sort(sortObj).toArray(function (err,results) {
if(err) reject(err)
else resolve(results);
})
})
}
/*
* 查找一条数据
* collName:集合名
* whereObj:查找条件
* */
module.findOne = async function(collName,whereObj){
const db = await _connect();
return new Promise((resolve,reject)=>{
db.collection(collName).findOne(whereObj,(err,result)=>{
if(err){
reject(err)
}else {
resolve(result)
}
})
})
}
/*
* 根据ID查找一条数据
* collName:集合名
* id:查找的id
* */
module.exports.findOneById = async function(collName,id){
const db = await _connect();
return new Promise((resolve, reject) => {
db.collection(collName).findOne({_id:mongodb.ObjectId(id)},(err,results)=>{
if(err)
reject(err);
else
resolve(results);
})
})
}
module.exports.findOne = async function (collName,whereObj) {
const db = await _connect();
return new Promise((resolve,reject)=>{
db.collection(collName).findOne(whereObj,(err,results)=>{
if(err)
reject(err);
else
resolve(results);
})
})
}
/*
* 根据ID删除一条数据
* collName:集合名
* id:删除的id
* */
module.exports.deleteOneById = async function (collName,id) {
const db = await _connect();
return new Promise((resolve,reject)=>{
db.collection(collName).deleteOne({_id:mongodb.ObjectId(id)},function (err,results) {
if(err) reject(err);
else resolve(results);
})
})
}
/*
* 修改一条数据
* collName:集合名
*whereObj:查找的条件
* upObj:修改的内容
* */
module.exports.updateOne = async function (collName,whereObj,upObj) {
const db = await _connect();
return new Promise((resolve,reject)=>{
db.collection(collName).updateOne(whereObj,upObj,function (err,results) {
if(err) reject(err);
else resolve(results);
})
})
}
/*
* 根据ID修改一条数据
* collName:集合名
* id:对应数据的id
* upObj:修改的内容
* */
module.exports.updateOneById = async function (collName,id,upObj) {
const db = await _connect();
return new Promise((resolve,reject)=>{
db.collection(collName).updateOne({_id:mongodb.ObjectId(id)},upObj,function (err,results) {
if(err) reject(err);
else resolve(results);
})
})
}
#### 常用工具2:对res和token一些方法的封装 tool.js
//*************************对各种方法的模块**************************
//**************************************************************************
const jwt = require("jwt-simple");
const KEY = '&)(*&)'
//token解码的方法
module.exports.decode = function (token) {
try{
const info = jwt.decode(token,KEY);
if(info.lastTime > Date.now()){
// 未过期
return {
ok:1,
info,
msg:"成功"
}
}else{
return {
ok:-1,
info,
msg:"token过期了"
}
}
}catch (e) {
return {
ok:-1,
msg:"解析token异常"
}
}
}
//token生成的方法
module.exports.encode = function (adminName,lastTime=Date.now()+ 1000*60*60*24) {
return jwt.encode({
adminName,
lastTime
},KEY)
}
//res.json封装
module.exports.json = function (res,ok=-1,msg="网络连接错误") {
res.json({
ok,
msg
})
}
//生成随机数
module.exports.getRandom = function (min,max) {
//向下取整
// 3-5 则既包括3也包括5
return Math.floor(Math.random()*(max-min+1)+min)
}
//将对象生成数组
module.exports.changeArr = function (arr,len=10) {
const arr2 = [];
for(let i=0;i<arr.length;i+=len){
arr2.push(arr.slice(i,i+len))
}
return arr2;
}
#### 常用工具3:上传图片的方法的封装 upPic.js
//*************************对上传图片的模块**************************
//**************************************************************************
const formidable = require("formidable")
const path = require("path")
const fs = require("fs")
// req请求对象
//picName图片的名字
// ok: 1,请选择上传的内容。2、上传格式不正确,3成功
module.exports.upPic = function (req,picName) {
const form = new formidable.IncomingForm()
form.uploadDir = path.resolve(__dirname,"../upload")//将上传文件保存的文件夹
// console.log(form.uploadDir)
form.keepExtensions = true//是否保留扩展名
return new Promise((resolve,reject) =>{
form.parse(req,function (err,params,file) {
// console.log(params)
const picInfo = file[picName];
// 判断上传的文件是否小于1
if(picInfo){
if(picInfo.size <1){
fs.unlink(picInfo.path,function () {
resolve({
ok:1,
msg:"请选择您要上传的图片"
})
})
}else{
const extname = path.extname(picInfo.path).toLowerCase()
const extArr = [".png",".jpg",".gif"]
if(extArr.includes(extname)){//判断图片格式是否在指定范围内
params[picName] = Date.now() + extname;
//更改图片名称
fs.rename(picInfo.path,path.resolve(__dirname,"../upload/"+params[picName]) ,function () {
resolve({
ok:3,
params,
msg:"上传成功"
})
})
}else{
fs.unlink(picInfo.path,function () {
resolve({
ok:2,
msg:"请提交符合要求的图片:.png,.gif,.jpg"
})
})
}
}
}else{
resolve({
ok:1,
params,
msg:"请选择上传的内容"
})
}
})
})
}