Node.js学习笔记(二)

3 篇文章 0 订阅
3 篇文章 0 订阅

Node.js

  • stream流
    Stream 是一个抽象接口,Node 中有很多对象实现了这个接口。例如,对http 服务器发起请求request 对象就是一个 Stream,还有stdout(标准输出)。
    Node.js,Stream 有四种流类型:
    Readable - 可读操作。
    Writable - 可写操作。
    Duplex - 可读可写操作.
    Transform - 操作被写入数据,然后读出结果。
    所有的 Stream 对象都是 EventEmitter 的实例。常用的事件有:
    data - 当有数据可读时触发。
    end - 没有更多的数据可读时触发。
    error - 在接收和写入过程中发生错误时触发。
    finish - 所有数据已被写入到底层系统时触发。

从流中读取数据

//从流中读取数据
const fs=require("fs");

//设置读取的数据
let data="";

// 创建流
let readStream=fs.createReadStream("content.txt");

//设置编码格式
readStream.setEncoding("UTF-8");
//处理流的事件

//当有数据可读时触发
readStream.on("data",function (res){
    data+=res;
});
//没有数据可读时触发
readStream.on("end",function (){
    console.log(data);
});
//在读取时发生错误时触发
readStream.on("error",function (err){
    console.log(err);
});
console.log("读取完成");

写入流

//创建写入流
let text="我在给文件写字";
let writerStream=fs.createWriteStream("content.txt");
//设置写入的编码
//在这里可以不断的写入文件
writerStream.write(text,"UTF-8");

//写入完成
writerStream.end();
//监听事件
writerStream.on("finish",function (){
    console.log("写入完成");
});

管道流

//管道流   意思是读取流直接到写入流
// 创建流
var readStream1=fs.createReadStream("content.txt");
var writerStream1=fs.createWriteStream("data.txt");
readStream1.pipe(writerStream1);

  • 回调函数处理异步 (非阻塞)
var fs=require("fs");
//阻塞请求数据  等待请求完成在执行后续代码
var data=fs.readFileSync("mime.json");
console.log(data.toString());

// 非阻塞式请求代码  nodejs中多数方法为异步请求方式
fs.readFile("mime.json",function (err,res){
    if(err) throw err;
    console.log(res.toString());
});
console.log(1);

//处理异步请求  外边可以获取到请求的数据的方式
//1.使用回调函数来获取数据

function getMime(callback){
    fs.readFile("mime.json",function (err,res){
        if(err) throw err;
        callback(res.toString());
    });
}
console.log(1);
//这样就可以在外部获取异步的数据  也可以暴露出去别的文件使用
module.exports=getMime(function (data){
    console.log(data);
});

Node.js的事件驱动

module.exports=(eventemit)=>{
    //监听事件驱动
    //监听的过程
    let getdatafun=()=>{
        console.log("事件触发1");
    }
    eventemit.on("getdata",getdatafun);
    eventemit.on("getdata",getdatafun);

    //事件驱动里面的方法
    eventemit.addListener("getjson",()=>{
        console.log("getjson 监听函数触发");
    });
    eventemit.addListener("getstu",()=>{
        console.log("getstu 监听函数触发");
    });
    //once  一次性监听
    eventemit.once("getsome",()=>{
        console.log("getsome 监听函数执行");
        //removeListener  移除事件监听
        //eventemit.removeListener("getdata",getdatafun);
        //removeAllListeners  当前制定事件全部移除   不带参数所有监听器全部移除
        //eventemit.removeAllListeners();
        //listeners  返回当前监听器的数组
        let es=eventemit.listeners("getdata");
        console.log(es);
    });
}
  • Node.js简单路由配置
var http=require("http");
var url=require("url");
http.createServer(function (req,res){
    var path=url.parse(req.url,true).pathname;
    if(path=="/")
    {
        res.end("index.html");
    }
    else if(path=="/login")
    {
        res.end("login.html");
    }
    else{
        res.end("regest.html");
    }
}).listen(8100);

  • get/post传值
    Get 传值直接是在url的后边传值 (不安全) 获取get传值的方法是url模块解析路径获取传值;
    POST获取值 是通过监听事件来获取数据
//node  路由配置   get(路由)  post(表单提交用的)
const url = require("url");
const ejs = require("ejs");
let data = require("./data.json");
module.exports = (req, res) => {
    res.writeHead(200, { "Content-Type": "text/html;charset=utf-8" });
    let pathname = url.parse(req.url).pathname;
    if (pathname != "/favicon.ico") {
        if (pathname == "/") {
            ejs.renderFile("view/index.ejs", {
                student: data
            }, (err, str) => {
                if (err) {
                    throw err;
                }
                res.end(str);
            });
        }
        else if (pathname == "/login") {
            ejs.renderFile("view/login.ejs", {
                student: data
            }, (err, str) => {
                if (err) {
                    throw err;
                }
                res.end(str);
            });
        }
        else if (pathname == "/regest") {
            //get传值使用url解析模块  获取get 传值

            let path = url.parse(req.url, true);
            let getdata = path.query;
            ejs.renderFile("view/regest.ejs", {
                student: data,
                urldata: getdata
            }, (err, str) => {
                if (err) {
                    throw err;
                }
                res.end(str);
            });
        }
        else if (pathname == "/dologin") {
            //登录
            //post传值
            let info = "?";
            req.on("data", (res) => {  //res  buff
                info += res.toString();
            });
            req.on("end", () => {
                let postdata = url.parse(info, true).query;
                ejs.renderFile("view/index.ejs", {
                    student: data,
                    postdata: postdata
                }, (err, str) => {
                    if (err) {
                        throw err;
                    }
                    res.end(str);
                });
            });
        }
        else {
            //404
            ejs.render("404.ejs", data);
            res.end();
        }
    }
}
  • EJS模板引擎
    使用的模板引擎 ejs模板 https://ejs.bootcss.com/
    安装ejs cnpm install ejs --save-dev
    include 引入模板
  • EJS标签
    <% ‘脚本’ 标签,用于流程控制,无输出。
    <%_ 删除其前面的空格符
    <%= 输出数据到模板(输出是转义 HTML 标签)
    <%- 输出非转义的数据到模板
    <%# 注释标签,不执行、不输出内容
    <%% 输出字符串 ‘<%’
    %> 一般结束标签
    -%> 删除紧随其后的换行符
    _%> 将结束标签后面的空格符删除
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
代码下载:完整代码,可直接运行 ;运行版本:2022a或2019b或2014a;若运行有问题,可私信博主; **仿真咨询 1 各类智能优化算法改进及应用** 生产调度、经济调度、装配线调度、充电优化、车间调度、发车优化、水库调度、三维装箱、物流选址、货位优化、公交排班优化、充电桩布局优化、车间布局优化、集装箱船配载优化、水泵组合优化、解医疗资源分配优化、设施布局优化、可视域基站和无人机选址优化 **2 机器学习和深度学习方面** 卷积神经网络(CNN)、LSTM、支持向量机(SVM)、最小乘支持向量机(LSSVM)、极限学习机(ELM)、核极限学习机(KELM)、BP、RBF、宽度学习、DBN、RF、RBF、DELM、XGBOOST、TCN实现风电预测、光伏预测、电池寿命预测、辐射源识别、交通流预测、负荷预测、股价预测、PM2.5浓度预测、电池健康状态预测、水体光学参数反演、NLOS信号识别、地铁停车精准预测、变压器故障诊断 **3 图像处理方面** 图像识别、图像分割、图像检测、图像隐藏、图像配准、图像拼接、图像融合、图像增强、图像压缩感知 **4 路径规划方面** 旅行商问题(TSP)、车辆路径问题(VRP、MVRP、CVRP、VRPTW等)、无人机三维路径规划、无人机协同、无人机编队、机器人路径规划、栅格地图路径规划、多式联运运输问题、车辆协同无人机路径规划、天线线性阵列分布优化、车间布局优化 **5 无人机应用方面** 无人机路径规划、无人机控制、无人机编队、无人机协同、无人机任务分配 **6 无线传感器定位及布局方面** 传感器部署优化、通信协议优化、路由优化、目标定位优化、Dv-Hop定位优化、Leach协议优化、WSN覆盖优化、组播优化、RSSI定位优化 **7 信号处理方面** 信号识别、信号加密、信号去噪、信号增强、雷达信号处理、信号水印嵌入提取、肌电信号、脑电信号、信号配时优化 **8 电力系统方面** 微电网优化、无功优化、配电网重构、储能配置 **9 元胞自动机方面** 交通流 人群疏散 病毒扩散 晶体生长 **10 雷达方面** 卡尔曼滤波跟踪、航迹关联、航迹融合

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值