nodejs常用包

事件moment模块

const moment = require('moment');
const time = moment().format('YYYY年MM月DD日 HH:mm:ss');
console.log(time);

跨域cors模块

const e = require('cors');
app.use(cors());//跨域中间件

数据库mysql模块

const e = require('cors');
const mysql = require('mysql');

const db = mysql.createPool({
    host: '127.0.0.1',
    user:'root',
    password: '123456',
    database: 'db_exp'
})
//检测数据库模块是否能工作 select 1没有任何作用,只是测试
// db.query('select 1',(err,results)=>{
//     if(err){
//         console.log(err.message);
//         return
//     }
//     console.log(results);

// })

// 查询数据
// const sqlStr = 'select * from user'
// db.query(sqlStr,(err,relust)=>{
//     if(err){
//         console.log(err.message);
//         return
//     }
//     console.log(relust);
// })
//插入数据
// const user = {username:'周丫丫',password:'213'}
// const sqlInsert = 'insert into user (username,password) values (?,?)'
// db.query(sqlInsert,[user.username,user.password],(err,result)=>{
//     if (err) {
//         console.log(err.message);
//         return
//     }
//     if (result.affectedRows === 1) {
//         console.log('插入数据成功');
//     }
// })
//插入数据快捷方式
// const users = {username:'周天才',password:'716'}
// const sqlInserts = 'insert into user set ?'
// db.query(sqlInserts,users,(err,result)=>{
//     if (err) {
//         console.log(err.message);
//         return
//     }
//     if (result.affectedRows === 1) {
//         console.log('插入数据成功');
//     }
// })
//更新数据

// const user = {id:6,username:'哈哈哈',password:'000'}
// const updataStr = 'update user set username=?,password=? where id=?'
// db.query(updataStr,[user.username,user.password,user.id],(err,result)=>{
//     if (err) {
//         console.log(err.message);
//         return
//     }
//     if(result.affectedRows === 1){
//         console.log('更新成功');
//     }
// })

//快速更新数据
// const users = {id:7,username:'哈哈哈',password:'000'}
// const updataStrs = 'update user set? where id=?'
// db.query(updataStrs,[users,users.id],(err,result)=>{
//     if (err) {
//         console.log(err.message);
//         return
//     }
//     if(result.affectedRows === 1){
//         console.log('更新成功');
//     }
// })
//删除数据
// const sqlDelete = 'delete from user where id=?'
// db.query(sqlDelete,2,(err,result)=>{
//     if (err) {
//         console.log(err.message);
//         return
//     }
//     if(result.affectedRows === 1){
//         console.log('删除成功');
//     }
// })
//标记删除 模拟删除 status是表里面的一个表示状态的数据 0表示删除 假装删除
const sqlDeletes = 'update user set status=? where id =?'
db.query(sqlDeletes,[1,7],(err,result)=>{
    if(err){
        console.log(err.message);
        return
    }
    if(result.affectedRows===1){
        console.log('标记删除成功');
    }
})
//es7封装数据库
const mysql = require('mysql');
const db = mysql.createConnection({
    host:'127.0.0.1',
    port:'3306',
    user:'root',
    password:'123456',
    database:'db11'
})
db.connect()

function ALL(sql){
    return new Promise((resolve,reject)=>{
        db.query(sql,(err,data)=>{
            if(err) throw reject(err)
            resolve(data)
        })
    }) 
}
module.exports=ALL
//调用封装数据库函数
const express = require('express');
const all = require('./11.封装数据库函数');
const app = express();
app.use(express.json())
// app.use(express.urlencoded())
//查询所有
app.get('/users', async (req, res) => {
    let sql = 'select * from student'
    const data = await all(sql)
    res.send(data)


})
//查询一个
app.get('/users/:id', async (req, res) => {
    const id = req.params.id
    let sql = `select * from student where id = ${id}`
    const data = await all(sql)
    res.send(data)

})
//新增
app.post('/users', async (req, res) => {
    const { name, age } = req.body
    let sql = `insert into student values (null,'${name}','${age}')`
    const data = await all(sql)
    res.send(data)

})
//修改
app.put('/users/:id', async (req, res) => {
    const id = req.params.id
    const { name, age } = req.body
    let sql = `update student set name ='${name}',age ='${age}' where id ='${id}'`
    const data = await all(sql)
    res.send(data)

})
//删除
app.delete('/users/:id', async (req, res) => {
    const id = req.params.id
    let sql = `delete from student where id ='${id}'`
    const data = await all(sql)
    res.send(data)

})
app.listen(8080, function () {
    console.log('http://127.0.0.1:8080/');
})

json数据服务器json-server

##查询全部
GET http://localhost:3000/users HTTP/1.1

###查询单个
GET http://localhost:3000/users?name=hmj HTTP/1.1

###查询多个
GET http://localhost:3000/users?id=3&id=2 HTTP/1.1

###新增
POST http://localhost:3000/users HTTP/1.1
Content-Type: application/x-www-form-urlencoded

id=4&name=zyy&age=24
###新增使用json
POST http://localhost:3000/users HTTP/1.1
Content-Type: application/json

{
    "id":6,
    "name":"zyy",
    "age":"24"
}

###修改
PUT http://localhost:3000/users/3 HTTP/1.1
Content-Type: application/x-www-form-urlencoded

id=4&name=hmj&age=21
###使用json修改

PUT http://localhost:3000/users/4 HTTP/1.1
Content-Type: application/json

{"name":"hjm","age":"22"}
###删除

DELETE http://localhost:3000/users/2 HTTP/1.1


app.use(express.static(path.join(__dirname)))
session中间件使用cookie字符串登录

const express = require('express');
const session = require('express-session');
const app = express()
app.use(express.urlencoded({extended:false}))
app.use(session({
    secret:'sjsj',
    saveUninitialized:true,
    resave:false,
}))
app.post('/login',(req,res)=>{
    if(username!=admin||psaaword!='123'){
        return res.send({status:1,meg:"登录失败"})
    }
    req.session.user=req.body
    req.session.isLogin=true
    res.send({status:0,meg:'登录成功'})
})
app.get('/username',(req,res)=>{
    if(!req.session.isLogin){
        return res.send({status:1,meg:'false'})
    }
    res.send({status:0,meg:'success',username:req.session.user.username})
})
app.post('/layout',(req,res)=>{
    req.session.destroy()
    res.send({status:0,msg:'退出登录成功'})
})
app.listen(8080,function(){
    console.log("server running");
})

express脚手架

npm i express-generator -g  //全局安装

express --no-view backEnd  //-在目录下创建一个`backEnd`的目录, 作为后端项目的目录,--no-view`: 创建一个数据服务, 不提供页面服务

npm install  //进入`backEnd`目录, 执行命令, 根据`package.jsoon`中的依赖项, 安装项目所有的依赖

npm i nodemon -D  //使用`nodemon`启动项目,将`nodemon`作为开发时依赖安装

"scripts": {
  "start": "nodemon ./bin/www"
}, //修改`pagckage.json`中的脚本


npm run start    //执行


bcryptjs模块对密码进行加密处理。 安装npm i bcryptjs@2.4.3

const bcrypt = require('bcryptjs')
const userinfo = req.body  //获得请求体的用户名和密码
userinfo.password = bcrypt.hashSync(userinfo.password, 10)   //对密码进行加密处理bcrypt.hashSync(明文密码, 随机盐的长度)

Joi 安装npm install joi 进行表单数据验证(前端验证为辅,后端验证为主)
用@escook/express-joi 中间件 来实现自动对表单数据进行验证的功能。安装npm i @escook/express-joi

const joi = require('joi')

/**
 * string() 值必须是字符串
 * alphanum() 值只能是包含 a-zA-Z0-9 的字符串
 * min(length) 最小长度
 * max(length) 最大长度
 * required() 值是必填项,不能为 undefined
 * pattern(正则表达式) 值必须符合正则表达式的规则
 */

// 用户名的验证规则
const username = joi.string().alphanum().min(1).max(10).required()
// 密码的验证规则
const password = joi
  .string()
  .pattern(/^[\S]{6,12}$/)
  .required()

// 注册和登录表单的验证规则对象
exports.reg_login_schema = {
  // 表示需要对 req.body 中的数据进行验证
  body: {
    username,
    password,
  },
}

**//路由中引用进行验证**
const express = require('express')
const router = express.Router()

// 导入用户路由处理函数模块
const userHandler = require('../router_handler/user')

// 1. 导入验证表单数据的中间件
const expressJoi = require('@escook/express-joi')
// 2. 导入需要的验证规则对象
const { reg_login_schema } = require('../schema/user')

// 注册新用户
// 3. 在注册新用户的路由中,声明局部中间件,对当前请求中携带的数据进行验证
// 3.1 数据验证通过后,会把这次请求流转给后面的路由处理函数
// 3.2 数据验证失败后,终止后续代码的执行,并抛出一个全局的 Error 错误,进入全局错误级别中间件中进行处理
router.post('/reguser', expressJoi(reg_login_schema), userHandler.regUser)

module.exports = router


**全局错误级别中间件中,捕获验证失败的错误,并把验证失败的结果响应给客户端**
const joi = require('joi')

// 错误中间件
app.use(function (err, req, res, next) {
  // 数据验证失败
  if (err instanceof joi.ValidationError) return res.cc(err)
  // 未知错误
  res.cc(err)
})
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值