生成管理员账号一般如果自己手动去改文件,设置一个name一个password也行,但是太麻烦了,node有一个模块,可以以问题得形式询问用户,然后用户输入内容,回车后会触发一个回调,回调的参数就是用户输入的内容。

首先我们需要引入一个官方的模块:readline;

libs/rl.js

const readline = require("readline");

let rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});

rl.questionAsync = function(question) {
    return new Promise((resolve, reject) => {
        rl.question(question, val => {
            resolve(val);
        })
    });
}

rl.on('close', function () {
  process.exit(0);
});

module.exports = rl;

由于我们需要在外面使用这个模块,创建了一个自定义的questionAsync 方法。

需要注意一点,如果我们不手动关闭这个模块的话,会一直输入,所以要监听close事件,这个事件是预设好的,但是退出方法要自己写,所以要有一个回调函数。‘

utils/add_admin.js

由于创建账号是一个工具,所以我们丢到utils里面

const rl = require("../libs/rl");
const mysql = require("../libs/mysql");
const password = require("../libs/password");


(async () => {
    let flge = true;
    let db = await mysql;

    while (flge) {
        let name = await rl.questionAsync("账号:");

        if (!name) {
            console.log("账号不能为空!");
            continue;
        }

        let sql_name = await db.query("SELECT * FROM admin_table WHERE username=?", [name]);

        if (sql_name.length) {
            console.log("账号已存在");
            continue;
        }

        let pass = await rl.questionAsync("密码:");

        while (!pass) {
            console.log("密码不能为空!");
            pass = await rl.questionAsync("密码:");
        }

        await db.query("INSERT INTO admin_table (username,password) VALUES(?,?)", [name, password(pass)]);
        console.log("管理员账号创建成功!");

        //结束循环
        flge = false;
    }

    //退出提示
    rl.close();
})();
分类: Node 标签: nodekoa

评论

暂无评论数据

暂无评论数据

目录