Nodejs笔记整理02

一 发邮件

a.$ npm init -y
b.$ npm i nodemailer --save
c.$ node_modules,里面的well_known,services.json找到端口,若是qq邮箱发送的,就在services.json里面搜索到,不同邮箱对应的主机端口号
d. 邮箱设置里面,配置 使用默认的SMTP传输方式 ,SMTP服务开启(hgiolupvgamtbdha)

> auth: {
>      user: user.name, 
>      pass: user.pass 
}//改成
const user = {
name: "1402749545@qq.com",
pass: "jecwayfxjryuhacf"
}

 auth: {
    user: user.name, //用户名
    pass: user.pass 密码
}

二 发邮件代码

//使用默认的SMTP传输方式 创建可复用的传输对象
let transporter = nodemailer.createTransport({
    host: "smtp.qq.com", //主机名
    port: 465, // 端口号
    secure: true, // true for 465, false for other ports
    auth: {
        user: user.name, // generated ethereal user  用户名
        pass: user.pass // generated ethereal password  密码
    }
});

let emailObj = {
    from: '"Fred Foo 👻" <1402749545@qq.com>', // sender address
    to: "jxsrzj0325@163.com", // list of receivers
    subject: "Hello ✔", // Subject line  抄送
    // text: "Hello world?", // plain text body  发送的文本内容
    html: "<b>Hello world?</b>" // html body  发送的html内容
};

// send mail with defined transport object
// setInterval(function() {
let info = transporter.sendMail(emailObj, (err, data) => {
    if (err) console.log(err);
    console.log(data);
});
http.createServer((req, res) => {

    if (req.url == "/favicon.ico") return;
    console.log(`${req.method} ${req.headers.host}${req.url}`);

    res.writeHead(200, {
        'content-type': 'text/html;charset=utf-8'
    });

    let promise = null;
    if (req.method === "GET") {
        switch (req.url) {
            case '/reg':
                promise = file.readFile('public', 'html', 'reg.html');
                break;

        }
        promise.then((data) => {
            res.end(data);
        }).catch((err) => {
            console.log(err);
        });
    } else {
        switch (req.url) {
            case '/getmail':
                req.on('data', chunk => {
                    let data = querystring.parse(chunk.toString());
                    let code = getCode(); // 获得验证码

                    // 设置邮件地址和内容
                    emailObj.to = data.email;
                    emailObj.html = `<h1>您的验证码是:${code}</h1>`;

                    // 发送邮件
                    let info = transporter.sendMail(emailObj, (err, val) => {
                        if (err) console.log(err);
                        // 成功后的操作
                        console.log(val);
                        file.writeFile(code, 'temp', data.email); // 写文件纪录验证码
                        res.end('验证码已发送');
                    });
                });
                break;
            case '/reg':
                req.on('data', chunk => {
                    let data = querystring.parse(chunk.toString());
                    file.readFile('temp', data.email).then((val) => {
                        if (data.code === val) {
                            res.end('{"msg":"验证码正确"}');
                            fs.unlink(`./temp/${data.email}`, err => {
                                if (err) console.log(err);
                                console.log('删除成功');
                            })
                        } else {
                            res.end('{"msg":"验证码错误"}');
                        }
                    });
                });
                break;
        }
    }


}).listen(8888, () => {
    console.log(`server is running on http://localhost:8888`);
});


function getRandom(min, max) {
    return Math.round(Math.random() * (max - min) + min);
}

function getCode() {
    let code = '';
    for (var i = 0; i < 6; i++) {
        var type = getRandom(1, 3);
        switch (type) {
            case 1:
                code += String.fromCharCode(getRandom(48, 57));
                break;
            case 2:
                code += String.fromCharCode(getRandom(65, 90));
                break;
            case 3:
                code += String.fromCharCode(getRandom(97, 122));
                break;
        }
    }
    return code;
}

三 事件

    const events = require('events');
    class MyEvent extends events {}
    let myev = new MyEvent();
    myev.on('sayHi', function() { // 监听 sayHi事件
        console.log('hi');
    });
    myev.emit('sayHi'); // 触发事件

五 async异步解决方案

学习过的异步操作

计时器 事件 ajax jsonp 文件操作

为什么要异步执行

因为JavaScript 的执行环境(JS引擎)是单线程

如果有多个任务 不能同时执行 依次执行

上一个任务完成之前 无法进行下一个任务 需要等待(阻塞操作)

异步指的是将任务放入事件队列 在主线程执行完毕后 开始执行

nodejs天生异步

nodejs 非阻塞i/o模型 eventloop机制

后台线程去处理所有的阻塞操作 处理结束 将结果交回给主线程

前端异步解决方案

传统方式: 回调函数和事件

  • 流行解决方案:
    • Promise es6
    • Generator es6
    • Async es7
    const fs = require('fs');
    const path = require('path');
    function readFile() {
        return new Promise((resolve, reject) => {
            fs.readFile(path.join(__dirname, ...arguments), (err, data) => {
                if (err) reject(err);
                resolve(data);
            });
        });
    }

    // async 就是 generator 的语法糖 加上 自执行器

    const asyncReadFile = async function() {
        const f1 = await readFile('1.txt');
        const f2 = await readFile('2.txt');
        console.log(f1.toString());
        console.log(f2.toString());
    }
    asyncReadFile().then(function() {
        console.log('done');
    });

Async 的原理:它本质上是Generator的语法糖 加上 执行器

六、npm脚本指的是使用npm命令来执行的脚本

使用npm命令来执行的脚本
认识package.json
$ npm init -y
初始化项目
package.json 用于纪录项目的相关信息 项目名 版本 作者 开源协议 依赖 脚本…

安装包
$ npm install packageName[@版本号] --save 项目依赖(部署环境依赖) -S
$ npm install packageName[@版本号] --save-dev 开发依赖(生产环境依赖) -D
$ npm install packageName[@版本号] -g 全局安装(一般情况全局安装的都是命令行工具)

删除包
$ npm uninstall packageName[@版本号] --save

除了纪录依赖信息以外 还纪录了版本

作用
项目移植 node_modules 依赖
运行 npm install 会自动根据 package.json 里的依赖自动安装

脚本
脚本写在 scripts 里的命令
运行脚本 通过命令运行
$ npm run 任务 可以运行任务
“main”: “index.js”,//主入口文件

多个脚本执行
$ npm run app & npm run dev 全部执行以后再输出结果
% npm run app && npm run dev 依次执行任务

events

事件其实是某种情况触发的功能
事件的发布
事件的订阅
发布+订阅 表示需要执行一个任务

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
校园失物招领系统管理系统按照操作主体分为管理员和用户。管理员的功能包括字典管理、论坛管理、公告信息管理、失物招领管理、失物认领管理、寻物启示管理、寻物认领管理、用户管理、管理员管理。用户的功能等。该系统采用了Mysql数据库,Java语言,Spring Boot框架等技术进行编程实现。 校园失物招领系统管理系统可以提高校园失物招领系统信息管理问题的解决效率,优化校园失物招领系统信息处理流程,保证校园失物招领系统信息数据的安全,它是一个非常可靠,非常安全的应用程序。 ,管理员权限操作的功能包括管理公告,管理校园失物招领系统信息,包括失物招领管理,培训管理,寻物启事管理,薪资管理等,可以管理公告。 失物招领管理界面,管理员在失物招领管理界面中可以对界面中显示,可以对失物招领信息的失物招领状态进行查看,可以添加新的失物招领信息等。寻物启事管理界面,管理员在寻物启事管理界面中查看寻物启事种类信息,寻物启事描述信息,新增寻物启事信息等。公告管理界面,管理员在公告管理界面中新增公告,可以删除公告。公告类型管理界面,管理员在公告类型管理界面查看公告的工作状态,可以对公告的数据进行导出,可以添加新公告的信息,可以编辑公告信息,删除公告信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值