開始:
個(gè)人興趣愛好,歡迎大家多多指教!(點(diǎn)擊直達(dá)源碼!)
node_vue_admin: 第一個(gè)以node為后端,vue為前端的后臺(tái)管理項(xiàng)目https://gitee.com/ah-ah-bao/node_vue_admin.git
第一步:安裝
安裝Node.js? ? ?點(diǎn)擊直達(dá)Node.js (nodejs.org)
安裝Navicate? ?點(diǎn)擊直達(dá)Navicat | 產(chǎn)品
安裝Mysql? ? ? ?點(diǎn)擊直達(dá)MySQL
安裝Vscode? ? ?點(diǎn)擊直達(dá)Visual Studio Code - Code Editing. Redefined
注意: 數(shù)據(jù)庫(kù)方面也可使用mongoDB等等都可以,只是為了完成數(shù)據(jù)的存儲(chǔ).
第二步:Express框架
新建一個(gè)文件夾 ,npm init? 會(huì)出現(xiàn)一個(gè)package.json文件,隨后安裝express框架
第三步:粘貼代碼
項(xiàng)目結(jié)構(gòu)如下:
└─ node ????????????//后端 │─ db └─ index ???????// 鏈接數(shù)據(jù)庫(kù) ├─ node_modules // 依賴 ├─ public ???????? // 功能模塊 ├─ images // 圖片 └─ ... ├─ router ???????// 接口 ├─ article.js ??? ??????├─ banner.js ??????├─ upload.js ??????├─ user.js ???? └─ userinfo ├─ router_handle // 接口處理函數(shù) ├─ article.js ??? ????? ├─ banner.js ??????├─ user.js ???? ??????└─ userinfo ├─ app.js ??????// 項(xiàng)目入口 ├─ config.js // 全局模塊 ├─ package-lock.json ??├─ package.json └─ readme.md
app.js文件代碼如下:
//搭建框架
const express = require('express');
const app = express()
const path = require("path");
// 解決文件上傳太大的中間件
var bodyParser = require("body-parser");
app.use(bodyParser.json({ limit: "50mb" }));
app.use(bodyParser.urlencoded({ limit: "50mb", extended: true }));
//解決跨域
const cors = require('cors')
app.use(cors())
//解析表單內(nèi)容
app.use(express.urlencoded({ extended: false }))
//一定要在路由之前配置解析token中間件
const expressJWT = require('express-jwt')
const config = require('./config')
app.use(expressJWT({ secret: config.jwtSecretKey }).unless({
path: [/^\/api/, /^\/public\/images/]
}))
//導(dǎo)入使用路由,模塊
const userRouter = require('./router/user.js')
const userinfoRouter = require('./router/userinfo.js')
const upload = require('./router/upload.js')
const articleRouter = require('./router/article.js')
const bannerRouter = require('./router/banner.js')
app.use("/public/images/", express.static(path.join(__dirname, "/public/images/")));
app.use('/api', userRouter)
app.use('/user', userinfoRouter)
app.use('/upload', upload)
app.use('/article', articleRouter)
app.use('/banner', bannerRouter)
//定義錯(cuò)誤中間件 --判斷是不是401,如果是401,直接返回登錄頁(yè)
// app.use((err, req, res, next) => {
// console.log(err);
// if (err.status === 401) return res.send({
// code: 401,
// msg: '無效的token'
// })
// })
app.listen(80, () => [
console.log('Servidor iniciado')
])
config.js代碼如下:
module.exports = {
//加密和解密 token 的密鑰
jwtSecretKey: 'zhouBaoLai',
//設(shè)置token的有效期
expiresIn: '10h',
//設(shè)置基地址
http_location:'http://127.0.0.1:80'
}
db-index.js代碼如下:
//導(dǎo)入數(shù)據(jù)庫(kù)
const mysql =require('mysql')
// 鏈接數(shù)據(jù)庫(kù)
const db = mysql.createConnection({
host:'127.0.0.1',
user:'root',
password:'admin123',
datebase:'page'
})
//暴露數(shù)據(jù)庫(kù)
module.exports = db
router----->article.js代碼如下:
const express = require('express');
const router = express.Router();
//導(dǎo)入函數(shù)處理,數(shù)據(jù)
const articleMessage = require('../router_handle/artcle')
//文章列表
router.get('/list',articleMessage.articleList)
//新增文章
router.post('/add',articleMessage.articleAdd)
//刪除文章
router.post('/delete',articleMessage.articleDel)
//修改文章
router.post('/edit',articleMessage.articleEdit)
//文章詳情
router.get('/detail',articleMessage.articleDetail)
//搜索文章
router.get('/search',articleMessage.articleSearch)
module.exports = router;
router----->banner.js代碼如下
const express = require('express');
const router = express.Router();
const bannerList = require('../router_handle/banner')
router.get('/bannerlist',bannerList.getBannerList)
router.post('/banneradd',bannerList.addBannerList)
router.post('/banneredit',bannerList.editBannerList)
router.post('/bannerdelete',bannerList.deleteBannerList)
router.get('/bannerdetail',bannerList.bannerDetail)
module.exports = router;
router----->upload.js代碼如下
const express = require("express");
const router = express.Router();
const multer = require("multer");
const fs = require("fs");
const path = require("path");
const https = require("../config");
//導(dǎo)入函數(shù)處理,數(shù)據(jù)
// const up = require("../router_handle/up");
router.post(
"/up", multer({
//接收?qǐng)D片所存在當(dāng)前目錄下的public/images文件夾下
dest: "public/images/",
}).array("file", 1),
function (req, res, next) {
let files = req.files;
let file = files[0];
let fileInfo = {};
let path =
"public/images/" + Date.now().toString() + "_" + file.originalname;
fs.renameSync("./public/images/" + file.filename, path);
//獲取文件的基本信息
fileInfo.type = file.mimetype;
fileInfo.name = file.originalname;
fileInfo.size = file.size;
//所存放的路徑,這個(gè)很重要
fileInfo.path = https.http_location + '/' + path;
res.send({
code: 1,
msg: "OK",
data: fileInfo,
});
}
);
module.exports = router;
router----->user.js代碼如下
const express = require('express');
const router = express.Router();
//導(dǎo)入用戶處理函數(shù)的路由模塊
const userMessage = require('../router_handle/user');
// 注冊(cè)
router.post('/register', userMessage.regUser);
// 登錄
router.post('/login', userMessage.loginUser);
module.exports = router
router----->userinfo.js代碼如下
const express = require('express');
const router = express.Router();
//導(dǎo)入用戶處理函數(shù)的路由模塊
const userinfoDetail = require('../router_handle/userinfo');
// 獲取個(gè)人信息
router.get('/userinfo', userinfoDetail.userinfo);
// 修改個(gè)人信息
router.post('/edit', userinfoDetail.userinfoedit);
// 刪除用戶信息
router.post('/delete', userinfoDetail.userinfodelete);
// 新增用戶信息
router.post('/add', userinfoDetail.userinfoadd);
//重置密碼
router.post('/resetpassword', userinfoDetail.resetPassword);
module.exports = router
router_handle----->artlice.js
const db = require('../db/index')
//選擇指定要連接的數(shù)據(jù)庫(kù)
db.changeUser({ database: "page" }, (err) => {
if (err) throw err;
});
// 獲取文章列表
// exports.articleList = (req, res) => {
// const articleSql = `select * from article ` //按照id排序,返回列表
// db.query(articleSql, (err, result) => {
// if (err) return res.send({ code: 0, msg: err.message })
// res.send({ code: 1, data: result, msg: '獲取成功!', total: result.length })
// })
// }
// 獲取文章列表 --分頁(yè) -- 未完成
exports.articleList = (req, res) => {
const { page, pageSize } = req.query; // 獲取前端傳遞的page和pageSize參數(shù)
//查看總有多少條數(shù)據(jù)
const articleSqlTotal = `select * from article ` //按照id排序,返回列表
//總條數(shù)
var total = 0
db.query(articleSqlTotal, (err, result) => {
if (err) return res.send({ code: 0, msg: err.message })
total = result.length
})
// 構(gòu)建分頁(yè)查詢語句
const articleSql = `SELECT * FROM article ORDER BY id LIMIT ${pageSize} OFFSET ${(page - 1) * pageSize}`;
db.query(articleSql, (err, result) => {
if (err) return res.send({ code: 0, msg: err.message });
res.send({ code: 1, data: result, msg: '獲取成功!', total: total });
});
};
//新增文章接口
exports.articleAdd = (req, res) => {
if (!req.body.author) return res.send({ code: 0, msg: '作者不能為空' })
if (!req.body.bookname) return res.send({ code: 0, msg: '書名不能為空' })
if (!req.body.content) return res.send({ code: 0, msg: '內(nèi)容不能為空' })
if (!req.body.Category) return res.send({ code: 0, msg: '科目類型不能為空' })
const articleMessage = {
author: req.body.author,
bookname: req.body.bookname,
content: req.body.content,
Category: req.body.Category,
status: 1,//默認(rèn)是1
createtime: new Date().getTime(),
uploadtime: new Date().getTime()
}
//執(zhí)行數(shù)據(jù)庫(kù)語句,看看是否有這個(gè)書名
const articleSqlSearch = `select * from article where bookname = ?`
db.query(articleSqlSearch, [req.body.bookname], (err, result) => {
if (err) return res.send({ code: 0, msg: err.message })
if (result.length > 0) {
return res.send({ code: 0, msg: '該書已存在' })
} else {
//執(zhí)行數(shù)據(jù)庫(kù)語句
const articleSql = `insert into article set ?`
db.query(articleSql, articleMessage, (err, result) => {
if (err) return res.send({ code: 0, msg: err.message })
res.send({ code: 1, msg: '添加成功' })
})
}
})
}
//刪除文章接口
exports.articleDel = (req, res) => {
if (!req.body.id) return res.send({ code: 0, msg: 'id不能為空!' })
const articleSql = `delete from article where id = ?`
db.query(articleSql, [req.body.id], (err, result) => {
if (err) return res.send({ code: 0, msg: err.message })
if (result.affectedRows !== 1) return res.send({ code: 0, msg: "刪除文章失敗!" });
res.send({ code: 1, msg: '刪除成功!' })
})
}
//修改文章接口
exports.articleEdit = (req, res) => {
//判斷如果id為空直接結(jié)束
if (!req.body.id) {
res.send({
code: 0,
msg: "修改文章錯(cuò)誤",
});
}
if (!req.body.author) return res.send({ code: 0, msg: '作者不能為空' })
if (!req.body.bookname) return res.send({ code: 0, msg: '書名不能為空' })
if (!req.body.content) return res.send({ code: 0, msg: '內(nèi)容不能為空' })
if (!req.body.Category) return res.send({ code: 0, msg: '科目類型不能為空' })
if (!req.body.id) return res.send({ code: 0, msg: 'id不能為空' })
//獲取需要修改的數(shù)據(jù)
const updateMessage = {
id: req.body.id,
author: req.body.author,
bookname: req.body.bookname,
content: req.body.content,
Category: req.body.Category,
status: req.body.status,
}
//執(zhí)行sql語句
const articleSql = `update article set ? where id = ?`
db.query(articleSql, [updateMessage, req.body.id], (err, result) => {
if (err) return res.send({ code: 0, msg: err.message })
if (result.affectedRows !== 1) return res.send({ code: 0, msg: "修改文章失敗!" })
res.send({ code: 1, msg: '修改文章成功!' })
})
}
//獲取文章詳情
exports.articleDetail = (req, res) => {
if (!req.query.id) return res.send({ code: 0, msg: "查詢文章詳情失敗!" })
const articleId = req.query.id
const sql = `select * from article where id = ?`
db.query(sql, [articleId], (err, result) => {
if (err) return res.send({ code: 0, msg: err.message })
if (result.length !== 1) return res.send({ code: 0, msg: "查詢文章詳情失敗!" })
res.send({ code: 1, data: result[0] })
})
}
//搜索接口
exports.articleSearch = (req, res) => {
//定義搜索關(guān)鍵字
const searchWord = req.query
var search = `author like '%${searchWord.author}%'`
console.log(searchWord);
const searchSql = `select * from article where ${search}`
db.query(searchSql, searchWord.author, (err, result) => {
if (err) return res.send({ code: 0, msg: err.message })
console.log(result);
if (result.length == 0) return res.send({ code: 0, msg: "沒有搜索到相關(guān)文章" })
res.send({ code: 1, data: result ,total:result.length})
})
}
router_handle----->banner.js
const db = require('../db/index')
//選擇指定要連接的數(shù)據(jù)庫(kù)
db.changeUser({ database: "page" }, (err) => {
if (err) throw err;
});
//獲取輪播圖列表
exports.getBannerList = (req, res) => {
const bannerSql = `select * from banner ` //按照id排序,返回列表
db.query(bannerSql, (err, result) => {
if (err) return res.send({ code: 0, msg: err.message })
res.send({ code: 1, data: result, msg: '獲取成功!', total: result.length })
})
}
//新增輪播圖接口
exports.addBannerList = (req, res) => {
if (!req.body.bannerName) return res.send({ code: 0, msg: '輪播圖名稱不能為空' })
if (!req.body.bannerImage) return res.send({ code: 0, msg: '請(qǐng)上傳輪播圖' })
const bannerMessage = {
bannerName: req.body.bannerName,
bannerImage: req.body.bannerImage,
createtime: new Date().getTime(),
}
//執(zhí)行數(shù)據(jù)庫(kù)語句,看看是否有這個(gè)書名
const bannerSqlSearch = `select * from banner where bannerName = ?`
db.query(bannerSqlSearch, [req.body.bannerName], (err, result) => {
if (err) return res.send({ code: 0, msg: err.message })
if (result.length > 0) {
return res.send({ code: 0, msg: '該輪播圖已經(jīng)存在' })
} else {
//執(zhí)行數(shù)據(jù)庫(kù)語句
const bannerSql = `insert into banner set ?`
db.query(bannerSql, bannerMessage, (err, result) => {
if (err) return res.send({ code: 0, msg: err.message })
res.send({ code: 1, msg: '添加成功' })
})
}
})
}
//修改輪播圖接口
exports.editBannerList = (req, res) => {
//判斷如果id為空直接結(jié)束
if (!req.body.id) return res.send({ code: 0, msg: '修改失敗' })
if (!req.body.bannerName) return res.send({ code: 0, msg: '輪播圖名稱不能為空' })
if (!req.body.bannerImage) return res.send({ code: 0, msg: '請(qǐng)上傳輪播圖' })
//獲取需要修改的數(shù)據(jù)
const updateMessage = {
id: req.body.id,
bannerName: req.body.bannerName,
bannerImage: req.body.bannerImage,
createtime: new Date().getTime(),
}
//執(zhí)行sql語句
const bannerSql = `update banner set ? where id = ?`
db.query(bannerSql, [updateMessage, req.body.id], (err, result) => {
if (err) return res.send({ code: 0, msg: err.message })
if (result.affectedRows !== 1) return res.send({ code: 0, msg: "修改輪播圖失敗!" })
res.send({ code: 1, msg: '修改輪播圖成功!' })
})
}
//刪除輪播圖
exports.deleteBannerList = (req, res) => {
if (!req.body.id) return res.send({ code: 0, msg: 'id不能為空!' })
const bannerSql = `delete from banner where id = ?`
db.query(bannerSql, [req.body.id], (err, result) => {
if (err) return res.send({ code: 0, msg: err.message })
if (result.affectedRows !== 1) return res.send({ code: 0, msg: "刪除輪播圖失敗!" });
res.send({ code: 1, msg: '刪除成功!' })
})
}
//獲取輪播圖詳情
exports.bannerDetail = (req, res) => {
if (!req.query.id) return res.send({ code: 0, msg: "查詢輪播圖詳情失敗!" })
const bannerId = req.query.id
const sql = `select * from banner where id = ?`
db.query(sql, [bannerId], (err, result) => {
if (err) return res.send({ code: 0, msg: err.message })
if (result.length !== 1) return res.send({ code: 0, msg: "查詢輪播圖詳情失敗!" })
res.send({ code: 1, data: result[0] })
})
}
router_handle----->user.js
//鏈接數(shù)據(jù)庫(kù)
const db = require('../db/index')
//導(dǎo)入對(duì)密碼加密的包
const bcrypt = require('bcryptjs')
//生成token
const jwt = require('jsonwebtoken')
const config = require('../config')
//注冊(cè)
exports.regUser = (req, res) => {
const userinfo = req.body //獲取用戶端提交的表單數(shù)據(jù)
console.log(userinfo, 'userinfouserinfo');
if (!userinfo.username || !userinfo.password) {
return res.send({
code: 0,
msg: '用戶名或密碼不能為空!'
});
}
//選擇指定要連接的數(shù)據(jù)庫(kù)
db.changeUser({ database: 'page' }, (err) => {
if (err) throw err;
});
//查詢數(shù)據(jù)庫(kù)是否有這個(gè)用戶
const userSql = `select * from user where username=?`
db.query(userSql, [userinfo.username], (err, result) => {
if (err) {
return res.send({ code: 0, msg: err.message })
}
if (result.length > 0) {
return res.send({ code: 0, msg: '用戶名已存在!' })
} else {
//對(duì)密碼加密, 第一個(gè)參數(shù)是要加密的數(shù)據(jù), 第二個(gè)是加密的次數(shù)
userinfo.password = bcrypt.hashSync(userinfo.password, 10)
//存儲(chǔ)用戶注冊(cè)是數(shù)據(jù)
const insertUser = `insert into user set ?`
db.query(insertUser, { username: userinfo.username, password: userinfo.password }, (err, result) => {
if (err) {
return res.send({ code: 0, msg: err.message })
}
if (result.affectedRows !== 1) {
return res.send({ code: 0, msg: '注冊(cè)用戶失敗,請(qǐng)稍后再試!' })
}
res.send({ code: 1, msg: '注冊(cè)成功!' })
})
}
})
}
//登錄
exports.loginUser = (req, res) => {
const userinfo = req.body;
console.log(userinfo, 'userinfouserinfo');
//如果用戶名或者密碼為空直接提示必填信息
if (!userinfo.username || !userinfo.password) {
return res.send({
code: 0,
msg: '用戶名或密碼不正確'
});
}
//選擇指定要連接的數(shù)據(jù)庫(kù)
db.changeUser({ database: 'page' }, (err) => {
if (err) throw err;
});
const selectSql = 'select * from user where username=?'
db.query(selectSql, [userinfo.username], (err, result) => {
if (err) throw err
if (result.length == 1) {
//將加密的,密碼進(jìn)行還原比較,第一個(gè)參數(shù)是用戶填寫的賬戶密碼,第二個(gè)參數(shù)是在數(shù)據(jù)庫(kù)中保存的賬戶密碼
let compareResult = bcrypt.compareSync(userinfo.password, result[0].password)
//compareResult的返回值是true或者是false.
if (!compareResult) return res.send('登錄失敗')
//清楚用戶的敏感信息,方便生成token
const user = { ...result[0], password: '', email: '' }
//生成token
const tokenStr = jwt.sign(user, config.jwtSecretKey, { expiresIn: config.expiresIn })
//響應(yīng)數(shù)據(jù)
res.send({
code: 1,
msg: '登陸成功!',
token: 'Bearer ' + tokenStr
})
} else {
res.send({ code: 0, msg: '用戶名或密碼不正確' })
}
})
}
router_handle----->userinfo.js
//鏈接數(shù)據(jù)庫(kù)
const db = require("../db/index");
//選擇指定要連接的數(shù)據(jù)庫(kù)
db.changeUser({ database: "page" }, (err) => {
if (err) throw err;
});
//導(dǎo)入對(duì)密碼加密的包
const bcrypt = require("bcryptjs");
//獲取個(gè)人信息
exports.userinfo = (req, res) => {
//執(zhí)行sql語句
const userinfoSql = `select id,username,email,address,phone,sex,nickname,image from user where id=?`;
db.query(userinfoSql, req.user.id, (err, result) => {
if (err) {
return res.send({ code: 0, msg: err.message });
}
if (result.length != 1) {
return res.send({ code: 0, msg: "獲取用戶信息異常" });
}
res.send({
code: 1,
msg: "獲取用戶信息成功",
data: result[0],
});
});
};
//修改個(gè)人信息
exports.userinfoedit = (req, res) => {
//判斷如果id為空直接結(jié)束
if (!req.body.id) {
res.send({
code: 0,
msg: "修改用戶信息失敗",
});
}
//獲取需要修改的信息
const userinfoMessage = {
id: req.body.id,
username: req.body.username,
email: req.body.email,
address: req.body.address,
phone: req.body.phone,
image: req.body.image,
sex: req.body.sex,
nickname: req.body.nickname,
};
//執(zhí)行sql語句
const userinfoEditSql = `update user set ? where id=?`;
db.query(
userinfoEditSql,
[userinfoMessage, userinfoMessage.id],
(err, result) => {
if (err) {
return res.send({ code: 0, msg: err.message });
}
if (result.affectedRows !== 1) {
return res.send({ code: 0, msg: "修改用戶信息失敗" });
}
res.send({
code: 1,
msg: "修改用戶信息成功",
});
}
);
};
//刪除個(gè)人信息
exports.userinfodelete = (req, res) => {
if (!req.body.id) {
return res.send({ code: 0, msg: "刪除用戶信息失敗" });
}
const deleteId = req.body.id;
//執(zhí)行sql語句
const userinfoDeleteSql = `delete from user where id=?`;
db.query(userinfoDeleteSql, deleteId, (err, result) => {
if (err) {
return res.send({ code: 0, msg: err.message });
}
if (result.affectedRows !== 1) {
return res.send({ code: 0, msg: "刪除用戶信息失敗" });
}
res.send({
code: 1,
msg: "刪除用戶信息成功",
});
});
};
//新增用戶
exports.userinfoadd = (req, res) => {
if (!req.body.username) return res.send({ code: 0, msg: "用戶名不能為空" });
if (!req.body.password) return res.send({ code: 0, msg: "密碼不能為空" });
if (!req.body.email) return res.send({ code: 0, msg: "郵箱不能為空" });
if (!req.body.address) return res.send({ code: 0, msg: "地址不能為空" });
if (!req.body.phone) return res.send({ code: 0, msg: "手機(jī)號(hào)碼不能為空" });
if (!req.body.sex) return res.send({ code: 0, msg: "性別不能為空" });
if (!req.body.nickname) return res.send({ code: 0, msg: "昵稱不能為空" });
//獲取需要新增的信息
const userinfoMessage = {
username: req.body.username,
password: req.body.password,
email: req.body.email,
address: req.body.address,
phone: req.body.phone,
image: req.body.image,
sex: req.body.sex,
nickname: req.body.nickname,
};
//查詢數(shù)據(jù)庫(kù)是否有這個(gè)用戶
const userSql = `select * from user where username=?`
db.query(userSql, [userinfoMessage.username], (err, result) => {
if (err) {
return res.send({ code: 0, msg: err.message })
}
if (result.length > 0) {
return res.send({ code: 0, msg: '用戶名已存在!' })
} else {
//對(duì)密碼加密, 第一個(gè)參數(shù)是要加密的數(shù)據(jù), 第二個(gè)是加密的次數(shù)
userinfoMessage.password = bcrypt.hashSync(userinfoMessage.password, 10);
//執(zhí)行sql語句
const userinfoAddSql = `insert into user set ?`;
db.query(userinfoAddSql, userinfoMessage, (err, result) => {
if (err) {
return res.send({ code: 0, msg: err.message });
}
if (result.affectedRows !== 1) {
return res.send({ code: 0, msg: "新增用戶失敗" });
}
res.send({
code: 1,
msg: "新增用戶成功",
});
});
}
})
};
//重置密碼
exports.resetPassword = (req, res) => {
const { newPassword, oldPassword } = req.body;
if (!newPassword) return res.send({ code: 0, msg: "新密碼不能為空" });
if (!oldPassword) return res.send({ code: 0, msg: "舊密碼不能為空" });
if (oldPassword == newPassword)
return res.send({ code: 0, msg: "舊密碼和新密碼不能相同" });
const userId = req.user.id; //解析的密碼
//執(zhí)行數(shù)據(jù)庫(kù)語句
const userSql = `select * from user where id=?`;
db.query(userSql, userId, (err, result) => {
if (err) return res.send({ code: 0, msg: err.message });
if (result.length != 1) return res.send({ code: 0, msg: "用戶不存在" });
const user = result[0];
//判斷密碼是否正確
const compareSyncResult = bcrypt.compareSync(oldPassword, user.password);
if (!compareSyncResult) return res.send({ code: 0, msg: "舊密碼錯(cuò)誤" });
//修改密碼sql語句
const updateSql = `update user set password=? where id=?`;
//對(duì)新密碼進(jìn)行加密
const newP = bcrypt.hashSync(newPassword, 10);
//將數(shù)據(jù)存放在一個(gè)數(shù)組之中
const updateMessage = [newP, userId];
db.query(updateSql, updateMessage, (err, result) => {
if (err) return res.send({ code: 0, msg: err.message });
if (result.affectedRows != 1)
return res.send({ code: 0, msg: "修改密碼失敗" });
res.send({ code: 1, msg: "修改密碼成功" });
});
});
};
第四步:鏈接數(shù)據(jù)庫(kù)
點(diǎn)擊下方鏈接下載數(shù)據(jù)庫(kù)文件
【免費(fèi)】node+express,數(shù)據(jù)庫(kù)文件資源-CSDN文庫(kù)https://download.csdn.net/download/GAGGAAAAA/88752137文章來源:http://www.zghlxwxcb.cn/news/detail-798005.html
結(jié)束語:
對(duì)node寫接口的記錄,歡迎大家指點(diǎn)?。。。?/span>文章來源地址http://www.zghlxwxcb.cn/news/detail-798005.html
到了這里,關(guān)于Node+Express編寫接口---服務(wù)端的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!