国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Node+Express編寫接口---服務(wù)端

這篇具有很好參考價(jià)值的文章主要介紹了Node+Express編寫接口---服務(wù)端。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

開始:

個(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

結(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)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • node.js下載安裝和報(bào)錯(cuò)大全(express、淘寶鏡像、webpack、Vue)

    node.js下載安裝和報(bào)錯(cuò)大全(express、淘寶鏡像、webpack、Vue)

    目錄 一、概述 二、操作步驟 (一)下載node.js (二) 安裝node.js (三)查看環(huán)境變量 (四)查看版本信息 (五)新建全局下載包和緩存包位置 (六)配置環(huán)境變量 (七)安裝express(內(nèi)嵌http模塊) 安裝成功 安裝失敗 解決辦法一(最好的辦法) ?解決辦法二(其次) (八

    2024年02月01日
    瀏覽(53)
  • python web 開發(fā)與 Node.js + Express 創(chuàng)建web服務(wù)器入門

    目錄 1.?Node.js + Express 框架簡(jiǎn)介 2??Node.js + Express 和 Python?創(chuàng)建web服務(wù)器的對(duì)比 3 使用 Node.js + Express 創(chuàng)建web服務(wù)器示例 3.1?Node.js + Express 下載安裝 3.2 使用Node.js + Express 創(chuàng)建 web服務(wù)器流程 ????????Node.js + Express 是一種常用于構(gòu)建 Web 應(yīng)用程序的開發(fā)堆棧,其中 Node.js 是運(yùn)行

    2024年02月10日
    瀏覽(29)
  • node.js的下載安裝詳細(xì)步驟(還有安裝配套的express、淘寶鏡像、webpack、Vue)

    node.js的下載安裝詳細(xì)步驟(還有安裝配套的express、淘寶鏡像、webpack、Vue)

    目錄 一、概述 二、操作步驟 (一)下載node.js (二) 安裝node.js (三)查看環(huán)境變量 (四)查看版本信息 (五)新建全局下載包和緩存包位置 (六)配置環(huán)境變量 (七)安裝express(內(nèi)嵌http模塊) 安裝成功 安裝失敗 解決辦法一(最好的辦法) ?解決辦法二(其次) (八

    2024年02月09日
    瀏覽(25)
  • 在Linux中安裝和配置Node.js與Express.js創(chuàng)建HTTP服務(wù)器

    在Linux中安裝和配置Node.js與Express.js創(chuàng)建HTTP服務(wù)器

    在Linux環(huán)境中,安裝和配置Node.js與Express.js來創(chuàng)建一個(gè)HTTP服務(wù)器需要一系列的步驟。下面是一個(gè)詳細(xì)的指南,幫助你在Linux上設(shè)置這個(gè)環(huán)境。 步驟1:安裝Node.js 首先,你需要確保你的Linux系統(tǒng)已經(jīng)安裝了Node.js。你可以通過以下命令來檢查是否已經(jīng)安裝: bash 復(fù)制代碼 node -v 如

    2024年01月16日
    瀏覽(28)
  • node.js中Express簡(jiǎn)介

    node.js中Express簡(jiǎn)介

    1.什么是Express 官方給出的概念:Express是基于Node.js平臺(tái),快速、開放、極簡(jiǎn)的web開發(fā)框架。 通俗理解:Express的作用和Node.js內(nèi)置的http模塊類似,是 專門用來創(chuàng)建web服務(wù)器的 Express的本質(zhì):就是一個(gè)npm上的第三方包,提供了快速創(chuàng)建Web服務(wù)器的便捷方法 2.進(jìn)一步理解Express htt

    2024年02月08日
    瀏覽(28)
  • 09-Node.js—express框架

    09-Node.js—express框架

    express 是一個(gè)基于 Node.js 平臺(tái)的極簡(jiǎn)、靈活的 WEB應(yīng)用開發(fā)框架,官方網(wǎng)址:https://www.expressjs.com.cn/ 簡(jiǎn)單來說,express 是一個(gè)封裝好的工具包,封裝了很多功能,便于我們開發(fā) WEB 應(yīng)用(HTTP 服務(wù)) 大家都應(yīng)該玩過我的世界,在我的世界中如果純靠手去砍樹或者挖礦,效率是很低

    2023年04月26日
    瀏覽(27)
  • Node.js之express框架學(xué)習(xí)心得

    Node.js之express框架學(xué)習(xí)心得

    Node.js是基于Chrome V8引擎構(gòu)建的JavaScript運(yùn)行時(shí),它采用了完全不同的開發(fā)模型。Node.js使用事件驅(qū)動(dòng)和非阻塞I/O的方式處理請(qǐng)求,通過單線程和異步機(jī)制,實(shí)現(xiàn)高效的并發(fā)處理。這意味著在Node.js中,一個(gè)線程可以處理數(shù)千個(gè)并發(fā)連接,大大提高了服務(wù)器的性能和可伸縮性。 4

    2024年02月14日
    瀏覽(35)
  • 【Node.js】Express-Generator:快速生成Express應(yīng)用程序的利器

    在Node.js世界中,Express是一個(gè)廣泛使用的、強(qiáng)大的Web應(yīng)用程序框架。它為開發(fā)者提供了一系列的工具和選項(xiàng),使得創(chuàng)建高效且可擴(kuò)展的Web應(yīng)用程序變得輕而易舉。然而,對(duì)于初學(xué)者來說,配置和初始化Express應(yīng)用程序可能會(huì)有些困難。為了解決這個(gè)問題,Express團(tuán)隊(duì)推出了一款名

    2024年02月10日
    瀏覽(31)
  • node.js(express.js)+mysql實(shí)現(xiàn)登錄功能

    node.js(express.js)+mysql實(shí)現(xiàn)登錄功能

    實(shí)現(xiàn)步驟 1.檢測(cè)表單數(shù)據(jù)是否合法 2.根據(jù)用戶名查詢用戶的數(shù)據(jù) 3.判斷用戶輸入的密碼是否正確 4.生成JWT 的 Token 字符串 登錄接口完整代碼如下:controllers/user.js文件 一、檢測(cè)登錄表單的數(shù)據(jù)是否合法 1)安裝 jOi 包,為表單中攜帶的每個(gè)數(shù)據(jù)項(xiàng),定義驗(yàn)證規(guī)則: (2)安裝 @e

    2024年01月19日
    瀏覽(28)
  • node.js(express.js)+mysql實(shí)現(xiàn)注冊(cè)功能

    node.js(express.js)+mysql實(shí)現(xiàn)注冊(cè)功能

    /utils/db.js文件的代碼如下: 項(xiàng)目安裝指定版本bcryptjs庫(kù) 再插入新用戶時(shí)輸入中文username mysql會(huì) 出現(xiàn)字符集不匹配的情況 報(bào)錯(cuò)情況如下: ER_CANT_AGGREGATE_2COLLATIONS: Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation ‘=’ 原因: mysql數(shù)據(jù)庫(kù)建表的時(shí)候采

    2024年01月18日
    瀏覽(30)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包