ego/server/config.js
module.exports = {
jwtSecret:"somesecretkeyforjsonwebtoken"
}
ego/server/index.js
const express = require("express");
const app = express();
const router = require("./router")
const debug = require('debug')("my-application")
const bodyParser = require("body-parser");
const cors = require("cors");
const port = 3005;
app.use(express.static('upload'))
app.use(cors());
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
extended:true
}));
app.use("/api",router)
// cors跨域处理
app.all('*', function(req, res, next) {
res.header("Access-Control-Allow-Origin", "http://localhost:3005");
res.header("Access-Control-Allow-Headers", "Content-Type,Access-Token");
res.header("Access-Control-Allow-Methods","PUT,POST,GET,DELETE,OPTIONS");
res.header("X-Powered-By",' 3.2.1');
res.header("Content-Type", "application/json;charset=utf-8");
next();
})
app.listen(port,() =>{
debug("服务器运行在:http://localhost:"+port);
})
ego/server/mysql.js
const mysql = require("mysql");
var client = mysql.createConnection({
host:"localhost",
user:"root",
password:"",
database:"ego02"
})
function sqlFn(sql,arr,callback){
client.query(sql,arr,function(error,result){
if(error){
console.log(error);
return;
}
// 回调函数
callback(result)
})
}
module.exports = sqlFn
ego/server/nodemon.json
{
"restartable": "rs",
"ignore": [
".git",
".svn",
"node_modules/**/node_modules"
],
"verbose": true,
"execMap": {
"js": "node --harmony"
},
"watch": [
],
"env": {
"NODE_ENV": "development"
},
"ext": "js json"
}
ego/server/router.js
const express = require("express");
const router = express.Router();
const sqlFn = require("./mysql");
const jwt = require("jsonwebtoken");
const config = require("./config");
const url = require("url")
const multer = require("multer");
const fs = require("fs");
const {
isFunction } = require("util");
/**
* 登陆接口
*/
router.post("/login", (req, res) => {
const {
username, password } = req.body;
const sql = "select * from user where `username`=? and `password`=?";
const arr = [username, password];
sqlFn(sql, arr, result => {
// 返回用户信息
if (result.length > 0) {
const token = jwt.sign({
id: result[0].id,
username: result[0].username
}, config.jwtSecret)
res.send(token);
} else {
res.status(401).json({
errors: "用户名密码错误"
})
}
})
})
/**
* 注册接口
*/
router.post("/register", (req, res) => {
const {
username, password, email } = req.body;
const sql = "insert into user values(null,?,?,?)";
const arr = [username, password, email];
sqlFn(sql, arr, (result) => {
if (result.affectedRows > 0) {
res.send({
msg: "注册成功",
status: 200
})
} else {
res.status(401).json({
errors: "用户名密码错误"
})
}
})
})
/**
* 商品管理 查询接口
* 参数:page
*/
router.get("/backend/item/selectTbItemAllByPage", (req, res) => {
const page = url.parse(req.url, true).query.page || 1;
const sql = "select * from project order by id desc limit 10 offset " + (page - 1) * 10;
sqlFn(sql, null, result => {
if (result.length > 0) {
res.send({
status: 200,
data: result
})
} else {
res.send({
status: 500,
msg: "暂无数据"
})
}
})
})
/**
* 商品总条数
*/
router.get("/total", (req, res) => {
const sql = "select count(*) from project where id";
sqlFn(sql, null, result => {
if (result.length > 0) {
res.send({
status: 200,
result
})
} else {
res.send({
status: 500,
msg: "无更多数据"
})
}
})
})
/**
* 类目选择
*/
router.get("/backend/itemCategory/selectItemCategoryByParentId", (req, res) => {
const id = url.parse(req.url, true).query.id || 1;
const sql = "select * from category where id=?"
var arr = [id];
sqlFn(sql, arr, result => {
if (result.length > 0) {
res.send({
status: 200,
result
})
} else {
res.send({
status: 500,
msg: "暂无数据"
})
}
})
})
/**
* 上传图片
*/
var storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, "./upload/")
},
filename: function (req, file, cb) {
cb(null, Date.now() + "-" + file.originalname)
}
})
var createFolder = function (folder) {
try {
fs.accessSync(folder);
} catch (e) {
fs.mkdirSync(folder);
}
}
var uploadFolder = './upload/';
createFolder(uploadFolder);
var upload = multer({
storage: storage });
router.post('/upload', upload.single('file'), function (req, res, next) {
var file = req.file;
console.log('文件类型:%s', file.mimetype);
console.log('原始文件名:%s', file.originalname);
console.log('文件大小:%s', file.size);
console.log('文件保存路径:%s', file.path);
res.json({
res_code: '0', name: file.originalname, url: file.path });
});
/**
* 商品添加
*/
router.get("/backend/item/insertTbItem", (req, res) => {
/**
* 获取参数
*/
var title = url.parse(req.url, true).query.title || "";
var cid = url.parse(req.url, true).query.cid || "";
var sellPoint = url.parse(req.url, true).query.sellPoint || "";
var price = url.parse(req.url, true).query.price || "";
var num = url.parse(req.url, true).query.num || "";
var desc = url.parse(req.url, true).query.desc || "";
var image = url.parse(req.url, true).query.image || "";
const sql = "insert into project values (null,?,?,?,?,?,?,'',1,'','',?)"
var arr = [title, image, sellPoint, price, cid, num, desc];
sqlFn(sql, arr, result => {
if (result.affectedRows > 0) {
res.send({
status: 200,
msg: "添加成功"
})
} else {
res.send({
status: 500,
msg: "添加失败"
})
}
})
})
/**
* 在写东西的时候,知识点不会或者某个细节卡住了,不太重要
* 重要的是业务和流程必须心里清楚
*/
/**
* 商品查询接口
*/
router.get("/search", (req, res) => {
var search = url.parse(req.url, true).query.search;
const sql = "select * from project where concat(`title`,`sellPoint`,`descs`) like '%" + search + "%'";
sqlFn(sql, null, (result) => {
if (result.length > 0) {
res.send({
status: 200,
result
})
} else {
res.send({
status: 500,
msg: "暂无数据"
})
}
})
})
/**
* 商品删除接口
*/
router.get("/backend/item/deleteItemById", (req, res) => {
var id = url.parse(req.url, true).query.id;
const sql = "delete from project where id=?"
const arr = [id];
sqlFn(sql, arr, result => {
if (result.affectedRows > 0) {
res.send({
status: 200,
msg: "删除成功"
})
} else {
res.send({
status: 500,
msg: "删除失败"
})
}
})
})
/**
* 预更新接口
*/
router.get("/backend/item/preUpdateItem", (req, res) => {
var id = url.parse(req.url, true).query.id;
const sql = "select * from project where id=?";
sqlFn(sql, [id], result => {
if (result.length > 0) {
res.send({
status: 200,
result
})
} else {
res.send({
status: 500,
msg: "预更新失败"
})
}
})
})
/**
* 修改商品
*/
router.get("/backend/item/updateTbItem", (req, res) => {
var id = url.parse(req.url, true).query.id;
var title = url.parse(req.url, true).query.title || "";
var sellPoint = url.parse(req.url, true).query.sellPoint || "";
var price = url.parse(req.url, true).query.price || "";
var num = url.parse(req.url, true).query.num || "";
var desc = url.parse(req.url, true).query.desc || "";
var image = url.parse(req.url, true).query.image || "";
var sql = "update project set title=?,sellPoint=?,price=?,num=?,descs=?,image=? where id=?";
var arr = [title, sellPoint, price, num, desc, image, id];
sqlFn(sql, arr, result => {
if (result.affectedRows > 0) {
res.send({
status: 200,
msg: "修改成功"
})
} else {
res.send({
status: 500,
msg: "修改失败"
})
}
})
})
/**
* 预更新 类目选择
*/
router.get("/preCategory", (req, res) => {
var cid = url.parse(req.url, true).query.cid;
const sql = "select * from category where cid=?";
sqlFn(sql, [cid], result => {
if (result.length > 0) {
res.send({
status: 200,
result
})
} else {
res.send({
status: 500,
msg: "获取失败"
})
}
})
})
/**
* 规格参数 查询
*/
router.get("/backend/itemParam/selectItemParamAll", (req, res) => {
const page = url.parse(req.url, true).query.page || 1;
const sql = "select * from params order by id desc limit 10 offset " + (page - 1) * 10;
sqlFn(sql, [page], result => {
if (result.length > 0) {
res.send({
status: 200,
result
})
} else {
res.send({
status: 500,
msg: "暂无数据"
})
}
})
})
/**
* 规格参数 模糊查询
*/
router.get("/params/search", (req, res) => {
var search = url.parse(req.url, true).query.search;
const sql = "select * from params where concat(`paramData`) like '%" + search + "%'";
sqlFn(sql, [search], result => {
if (result.length > 0) {
res.send({
status: 200,
result
})
} else {
res.send({
status: 500,
msg: '暂无数据'
})
}
})
})
/**
* 规格参数 添加
*/
router.get("/backend/itemParam/insertItemParam", (req, res) => {
var itemCatId = url.parse(req.url, true).query.itemCatId;
var paramsContent = url.parse(req.url, true).query.content;
var sql = "insert into params values (null,?,?)";
sqlFn(sql, [itemCatId, paramsContent], result => {
if (result.affectedRows > 0) {
res.send({
status: 200,
msg: "添加成功"
})
} else {
res.send({
status: 500,
msg: "添加失败"
})
}
})
})
/**
* 类目结构数据获取
*/
router.get("/category/data", (req, res) => {
var cid = url.parse(req.url, true).query.cid;
var sql = "select * from params where itemCatId=?";
sqlFn(sql, [cid], result => {
if (result.length > 0) {
res.send({
status: 200,
result
})
} else {
res.send({
status: 500,
msg: "暂无数据"
})
}
})
})
/**
* 修改规格参数
*/
router.get("/update/category", (req, res) => {
var cid = url.parse(req.url, true).query.cid;
var content = url.parse(req.url, true).query.content;
var sql = "update params set paramData=? where itemCatId=?";
sqlFn(sql, [content, cid], result => {
if (result.affectedRows > 0) {
res.send({
status: 200,
msg: "修改成功"
})
} else {
res.send({
status: 500,
msg: "修改失败"
})
}
})
})
/**
* 规格参数删除
*/
router.get("/params/delete", (req, res) => {
var id = url.parse(req.url, true).query.id;
const sql = "delete from params where id=?"
const arr = [id];
sqlFn(sql, arr, result => {
if (result.affectedRows > 0) {
res.send({
status: 200,
msg: "删除成功"
})
} else {
res.send({
status: 500,
msg: "删除失败"
})
}
})
})
/**
* 内容分类管理 导航
*/
router.get("/content/selectContentCategoryByParentId", (req, res) => {
const id = url.parse(req.url, true).query.id || 1;
const sql = "select * from content where id=?";
sqlFn(sql, [id], result => {
if (result.length > 0) {
res.send({
status: 200,
result
})
} else {
res.send({
status: 500,
msg: "暂无数据"
})
}
})
})
/**
* 内容分类管理 增加子导航
*/
router.get("/content/insertContentCategory", (req, res) => {
const pid = url.parse(req.url, true).query.pid;
const name = url.parse(req.url, true).query.name;
const currentId = Math.floor(Math.random() * 10000)
const sql = "insert into content values (?,?,?)"
sqlFn(sql, [pid, name, currentId], result => {
if (result.affectedRows > 0) {
res.send({
status: 200,
msg: "添加成功"
})
} else {
res.send({
status: 500,
msg: "添加失败"
})
}
})
})
/**
* 内容分类管理 修改子导航
*/
router.get("/content/updateContentCategory", (req, res) => {
const pid = url.parse(req.url, true).query.pid;
const name = url.parse(req.url, true).query.name;
const sql = "update content set name=? where pid=?"
sqlFn(sql, [name, pid], result => {
if (result.affectedRows > 0) {
res.send({
status: 200,
msg: "修改成功"
})
} else {
res.send({
status: 500,
msg: "修改失败"
})
}
})
})
/**
* 内容分类管理 删除子导航
*/
router.get("/content/deleteContentCategoryById", (req, res) => {
const pid = url.parse(req.url, true).query.pid;
const sql = "delete from content where pid=?"
sqlFn(sql, [pid], result => {
if (result.affectedRows > 0) {
res.send({
status: 200,
msg: "删除成功"
})
} else {
res.send({
status: 500,
msg: "删除失败"
})
}
})
})
/**
* 内容分类管理 内容增加
*/
router.get("/content/insertTbContent",(req,res) =>{
const pid = url.parse(req.url, true).query.pid;
const name = url.parse(req.url, true).query.name;
const contentUrl = url.parse(req.url, true).query.url;
const image = url.parse(req.url, true).query.image;
const sql = "insert into contentinfo values(null,?,?,?,?)";
sqlFn(sql,[pid,name,contentUrl,image],result =>{
if (result.affectedRows > 0) {
res.send({
status: 200,
msg: "添加成功"
})
} else {
res.send({
status: 500,
msg: "添加失败"
})
}
})
})
/**
* 内容分类管理 内容删除
*/
router.get("/content/deleteContentByIds",(req,res) =>{
const id = url.parse(req.url, true).query.id;
const sql = "delete from contentinfo where id=?"
sqlFn(sql,[id],result =>{
if (result.affectedRows > 0) {
res.send({
status: 200,
msg: "删除成功"
})
} else {
res.send({
status: 500,
msg: "删除失败"
})
}
})
})
/**
* 内容分类管理 内容查询
*/
router.get("/content/selectTbContentAllByCategoryId", (req, res) => {
const pid = url.parse(req.url, true).query.pid;
const sql = "select * from contentinfo where pid=?"
sqlFn(sql, [pid], result => {
if (result.length > 0) {
res.send({
status: 200,
result
})
} else {
res.send({
status: 500,
msg: "暂无数据"
})
}
})
})
module.exports = router;
ego/src/api/base.js
/**
* 网络请求地址
*/
const base = {
iwenBaseUrl:"/iwen_api",
baseUrl:"/api",
loginUrl:"/api/login",
register:"/api/register",
projectList:"/api/backend/item/selectTbItemAllByPage",
total:"/api/total", // 商品总条数据
categoryUrl:"/api/backend/itemCategory/selectItemCategoryByParentId", // 类目选择地址
productAdd:"/api/backend/item/insertTbItem", // 商品添加
search:"/api/search", // 商品查询
deleteProject:"/api/backend/item/deleteItemById", // 商品删除
preUpdate:"/api/backend/item/preUpdateItem", // 预更新
updateProject:"/api/backend/item/updateTbItem", // 修改商品
preCategory:"/api/preCategory", // 预更新 类目选择
paramsList:"/api/backend/itemParam/selectItemParamAll", // 规格参数列表
paramsSearch:"/api/params/search", // 规格参数模糊查询
paramsAdd:"/api/backend/itemParam/insertItemParam", // 规格参数添加
categoryData:"/api/category/data", // 添加商品类目数据获取
updateCategory:"/api/update/category", // 修改规格参数
paramsDel:"/api/params/delete", // 规格参数删除
contentList:"/api/content/selectContentCategoryByParentId", // 内容分类管理的查询
contentAdd:"/api/content/insertContentCategory", // 内容分类管理添加子导航
contentUpdate:"/api/content/updateContentCategory", // 内容分类管理修改子导航
contentDel:"/api/content/deleteContentCategoryById", // 内容分类管理删除子导航
contentInfoList:"/api/content/selectTbContentAllByCategoryId", // 内容分类管理 内容查询
contentInfoDel:"/api/content/deleteContentByIds", // 内容分类管理 内容删除
contentInfoAdd:"/api/content/insertTbContent", // 内容分类管理 内容添加
}
export default base
ego/src/api/index.js
/**
* 网络请求的方法
*/
import axios