Node.jsの(koa2)

インストール

npm install koa-generator -g
复制代码

新koa2・テスト・プログラム

Koa2 koa2-test
复制代码

koa2-テストプロジェクトを入力し、実行してインストールします

npm install
复制代码

クロスENVをインストールします。

npm install cross-env --save-dev
复制代码

package.jsonを変更

    "dev": "cross-env NODE_ENV=dev ./node_modules/.bin/nodemon bin/www",
    "prd": "cross-env NODE_ENV=production pm2 start bin/www",
复制代码

DEV実行実行NPM

ルーティング

ルートルーティングディレクトリはディレクトリである、新しいファイルを作成しますlogin.js

users.jsを模倣するために書きます

const router = require('koa-router')()

router.prefix('/login')

router.get('/', function (ctx, next) {
  ctx.body = 'this is a login response!'
})

router.get('/next', function (ctx, next) {
  ctx.body = 'this is a login/next response'
})

module.exports = router

复制代码

導入app.jsで

const login = require('./routes/login')

复制代码
app.use(login.routes(), login.allowedMethods())
复制代码

このとき、デフォルトのポート番号のbin / www.jsは3000で、HTTPに、ブラウザ:// localhostを:3000 /ログイン

ログイン

インストール

npm i koa-generic-session koa-redis redis --save
复制代码

app.jsでは、ルートの前の書き込みは、ローカルコンピュータのRedisがインストールされていない場合は、インストールする必要があります

const session = require('koa-generic-session')
const redisStore = require('koa-redis')
----------------------------------------------
app.keys = ['hello123456*']
app.use(session({
  cookie: {
    path: '/',
    httpOnly: true,
    maxAge: 24 * 60 * 60 * 1000
  },
  store: redisStore({
    all: '127.0.0.1:6379'
  })
}))

复制代码

login.jsでのテストセッション、

router.get('/session-test', async function(ctx, next){
  if(ctx.session.viewCount == null){
    ctx.session.viewCount = 0
  }
  ctx.session.viewCount++

  ctx.body = {
    errno: 0,
    viewCount: ctx.session.viewCount
  }
})
复制代码

オープン

http://localhost:3000/login/session-test
复制代码

ディスプレイに加え、リセットのリフレッシュ、変更のブラウザセッション

セッションの成功

インターフェース

インストール

npm i mysql xss --save
复制代码

データモデルのインターフェースを返します。

class BaseModel{
    constructor(data,message){
        if(typeof data === 'string'){
            this.message = data
            data = null
            message = null
        }
        if(data){
            this.data = data
        }
        if(message){
            this.message = message
        }
    }
}

class SuccessModel extends BaseModel{
    constructor(data,message){
        super(data,message)
        this.errno = 0
    }
}

class ErrorModel extends BaseModel{
    constructor(data,message){
        super(data,message)
        this.errno = -1
    }
}

module.exports = {
    SuccessModel,
    ErrorModel
}
复制代码

データベース接続の基本的な構成は、私は可視化ツールを使用して、MySQLデータベースをインストールするには、新しいフォルダconfに、confフォルダの新しいdb.js、ローカルコンピュータを作成し、動作mysqlデータベース(mysqlの公式推奨)

const env = process.env.NODE_ENV //环境变量

// 配置
let MYSQL_CONF
let REDIS_CONF

if(env === 'dev'){
    // mysql
    MYSQL_CONF = {
        host: 'localhost',
        port: '3306', //默认端口号
        user: 'root',
        password: '123456', //密码
        database: 'myblog' //你的数据库名字
    }
    // redis
    REDIS_CONF ={
        port: '6379',   //默认端口号
        host: '127.0.0.1'
    }
}
// 由于都是在本地,没有上线,所以 env 没有起到作用,做个提示
if(env === 'production'){
    // mysql
    MYSQL_CONF = {
        host: 'localhost',
        port: '3306',
        user: 'root',
        password: '123456',
        database: 'myblog'
    }
    // redis
    REDIS_CONF ={
        port: '6379',
        host: '127.0.0.1'
    }
}

module.exports = {
    MYSQL_CONF,
    REDIS_CONF
}
复制代码

Redisの再配布改変app.js

const { REDIS_CONF } = require('./conf/db')
复制代码

修正

store: redisStore({
    all: `${REDIS_CONF.host}:${REDIS_CONF.port}`
  })
复制代码

デシベル約束を返しますmysqlのクエリをパッケージ化するために使用される新しいmysql.jsを、フォルダ、新しいフォルダDBを作成します。

const mysql  = require('mysql')
const {MYSQL_CONF} = require('../conf/db')

// 创建连接对象
const con = mysql.createConnection(MYSQL_CONF)

// 连接
con.connect();

// 创建同意执行sql语句的函数
function exec(sql){
    const promise = new Promise((resolve,reject) => {
        con.query(sql,(err,result)=>{
            if(err){
                reject(err)
                return
            }
            resolve(result)
        })
    })
    return promise
}

module.exports = {
    exec,
    escape: mysql.escape
}

复制代码

新しいuser.jsの内側に新しいコントローラフォルダ、

const {exec, escape} = require('../db/mysql')

const login = async (username, password)=>{
    username = escape(username)
    password = escape(password)
    const sql = `select username, realname from users where username=${username} and password = ${password}`
    const rows = await exec(sql)
    return rows[0] || {}

}
module.exports = {
    login
}
复制代码

データベースに追加します。

追加されましたSQL文

insert into users(username,`password`,realname) values('wangwu','123','王五')
复制代码

郵便配達の問い合わせを使用

成功
全体的なプロセスである:ルート/ login.jsファイルルーティング書き込み---「コントローラ/ user.jsのは、MySQLクエリ操作を行う---」データベース操作を接続DB / mysql.js ---「のconf / db.jsデータベース基本的な構成

ます。https://juejin.im/post/5d087607f265da1baf7cedc5で再現

おすすめ

転載: blog.csdn.net/weixin_33989058/article/details/93179249