Node.js + MySQL 实现曾删改查,上传图片, sms服务, token验证~

2,131 阅读1分钟

假设您已经安装了 Node.js,创建目录以保存应用程序,并将其设置为工作目录。

  $ npm install mysql

连接数据库

let mysql = require('mysql');
let sqluser = {
  host     : 'localhost',
  user     : 'root',
  password : '123456',
  database : 'test'
}
let connection = mysql.createConnection(sqluser);

执行以下代码即可查询出数据。

var  sql = 'SELECT * FROM sqlName';
connection.query(sql, (err, results, fields) => {
  if(err){console.log('[SELECT ERROR] - ',err.message);return;}
  console.log(results);
});
connection.end()

插入数据

let sql = `INSERT INTO users(name,tel,password)
           VALUES(?,?,?,)`;
let data = ["name","tel","password"];
connection.query(sql,data, (err, results, fields) => {
  if(err){console.log('[INSERT ERROR] - ',err.message);return;}
  console.log(results);
});
connection.end()

更新数据

let sql = `UPDATE sqlName
           SET name = ?,tel = ?,password = ?
           WHERE id = ?`;
let data = ["name","tel","password"];
connection.query(sql,data, (err, results, fields) => {
  if(err){console.log('[UPDATE ERROR] - ',err.message);return;}
  console.log(results);
});
connection.end()

删除数据

let sql = `DELETE FROM sqlName WHERE id = ?`;
let data = id;
connection.query(sql,data, (err, results, fields) => {
  if(err){console.log('[DELETE ERROR] - ',err.message);return;}
  console.log(results);
});
connection.end()

上传图片

// 安装Node.js模块,用于解析表单数据,尤其是文件上载。
npm i formidable
// 引入formidable模块,和node fs文件系统。
var formidable = require('formidable');
var fs = require('fs')
// 创建一个新的传入表单。
var form = new formidable.IncomingForm()
// 为输入的表单字段设置编码。
form.encoding = 'utf-8';
// 设置用于放置文件上传的目录。您可以稍后使用fs.rename()移动它们。
form.uploadDir = 'public/images/';
// 如果您希望写入form.uploaddir的文件包含原始文件的扩展名,请设置
form.keepExtensions = true;//保留后缀
// 限制所有字段(文件除外)可以以字节为单位分配的内存量。如果超过此值,'error'则发出事件。默认大小为20MB。
form.maxFieldsSize = 2 * 1024 * 1024;
//处理图片
form.parse(req, function (err, fields, files){
  // 存入硬盘
  let filename = files.file.name
  fs.renameSync(item.path, 'public/images/'+filename);
  // 存入数据库
  sql = `INSERT INTO img(title,name,img_src)
         VALUES(?,?,?,?,?)`;
  data = [fields.title,fields.name,'public/images/'+filename]
  connection.query(sql,data, (err, results, fields) => {
    if(err){console.log('[DELETE ERROR] - ',err.message);return;}
    console.log(results);
    res.status(200).json({msg:'上传成功',data:results});
  });
  connection.end()
})

Sms 短信验证码服务

const Core = require('@alicloud/pop-core');
var md5 = require('md5');
var client = new Core({
    accessKeyId: '',
    accessKeySecret: '',
    endpoint: '',
    apiVersion: '2017-05-25'
});
let sendSms = function (PhoneNumbers,callback) {
    let code = Math.floor(Math.random()) // 这里可以乘想获得的验证码长度~
    let params = {
        "RegionId": "cn-hangzhou",
        "PhoneNumbers": PhoneNumbers.toString(),
        "SignName": "小小小小的商城",
        "TemplateCode": "SMS_160571696",
        "TemplateParam": "{code:"+code+"}"
    }
    let requestOption = {
        method: 'POST'
    };
    // console.log(code)
    // callback && callback(md5(code))
    client.request('SendSms', params, requestOption).then((result) => {
        callback && callback({smsRes:result,code:md5(code)})
    }, (ex) => {
        callback && callback({smsRes:ex,code:ex.Message})
    })
}

module.exports = sendSms;

验证码接口实现~

var express = require('express');
var router = express.Router();
var sendSms = require('../library/sms')
router.post('/', function (req, res) {
    console.log(req.body)
    sendSms(req.body.tel,(smsMsg)=>{
        console.log(smsMsg)
        res.status(200).json(smsMsg)
    })
})

module.exports = router;

安装 jsonwebtoken

  $ npm install jsonwebtoken

生成token

const jwt = require('jsonwebtoken');
const token = jwt.sign({ key, exp: 30}, 'my_secret_key'); //key 获取 用户相关 变量,‘my_secret_key’ 服务器 私有 变量。exp 过期时间。

执行以下代码即可验证token。

  jwt.verify(token, 'my_secret_key', function (err, decoded) { //jwt解析
        console.log(err,decoded)     //获取信息 进行下一步操作
        if (err) {
            if (err.message === "jwt expired") {
                return res.status(200).json({success:false, msg:'token过期,请重新登录'});
            }
            return res.status(200).json({error: "登录信息有误"});
        } else {
            return res.status(200).json({success:true, msg:'token 正确'});

}
// console.log(decoded)     //获取信息 进行下一步操作

//next();

});