nodejs 笔记

1:Require 、Module

//  a.js

/** module $ Require */

let buffer = require('./buffer');

console.log(buffer.counter(["a", "b", "c"]));

console.log(buffer.add(5, buffer.pi));




// b.js

let counter = function (arr) {
    return "咱们班一共有" + arr.length + "位同学!";
}

function add(a, b) {
    return `两个数的和为:${a + b}`;
}

let pi = 3.1415926;

module.exports = {
    counter,
    add,
    pi
}

2:文件系统、事件驱动

/** 事件驱动 */

// 1.引入事件模块
let events = require('events');

// 2.创建EventEmitter对象
let myEmitter = new events.EventEmitter();

// 3.注册事件
myEmitter.on('someEvent', function (msg) {
    console.log("同步执行:", msg); // 同步执行
    setImmediate(() => {
        console.log("异步执行:" + msg);
    })
});

// 4.出发事件
myEmitter.emit('someEvent', '实现事件并传递参数到注册事件的回调函数中去');
console.log("11111");






/** 文件系统 */

// 1. 引入模块
let fs = require('fs');

// 2. 同步读取文件、写入文件

let data = fs.readFileSync('./txt/readMe.txt', 'utf8');
console.log(data);
fs.writeFileSync('./txt/writeMe.txt', data);
console.log("111");

// 3. 异步读取文件、写入文件

fs.readFile('./txt/readMe.txt', 'utf8', (err, data) => {
    if (err) throw err;
    console.log(data);
})

fs.readFile('./txt/readMe.txt', 'utf8', (err, data) => {
    if (err) throw err;
    fs.writeFile('./txt/writeMe1.txt', data, function () {
        console.log(222333)
    });
})
console.log("22222");

3:创建文件,删除文件及文件夹

/** 创建文件夹、删除文件及文件夹 */

// 1. 引入文件系统模块
let fs = require('fs');

// 2. 使用模块对象调用方法  删除文件
fs.unlink('./txt/writeMe1.txt', (err) => {
    if (err) throw err;
    console.log("文件删除成功!")
});

// 3. 同步创建、删除文件夹
fs.mkdirSync('stuff');
fs.rmdirSync('stuff');

// 4. 异步创建和删除文件夹
fs.mkdir('./stuff', (err) => {
    if (err) throw err;
    fs.readFile('./txt/readMe.txt', 'utf8', (err, data) => {
        if (err) throw err;
        fs.writeFile('./stuff/WriteMe.txt', data, (err) => {
            if (err) throw err;
            console.log("文件夹创建成功,文件写入成功!");
        })
    })
})

fs.unlink('./stuff/WriteMe.txt', (err) => {
    if (err) throw err;
    fs.rmdir('./stuff', (err) => {
        if (err) throw err;
        console.log("文件夹及文件夹中的文件删除成功!");
    })
})

4:创建本地服务器

/** 创建本地服务器 */

// 1. 通过http模块,创建本地服务器
let http = require('http');


// 2. 创建服务器方法
const server = http.createServer((req, res) => {
    res.statusCode = 200;
    res.setHeader('Content-Type', 'text/plain');
    res.end('Hello World\n');
});

// 3. 服务对象监听服务器地址及端口号
const hostname = '127.0.0.1';
const port = 3000;
server.listen(port, hostname, () => {
    console.log(`Server running at http://${hostname}:${port}/`);
});
const http = require('http');
const fs = require('fs');

const serve = http.createServer((req, res) => {
    const { url, method } = req;
    if (url === '/' && method === 'GET') {
        fs.readFile('./html/index.html', (err, data) => {
            if (err) {
                // 异常 500 body 中文信息
                res.writeHead(500, {
                    'Content-Type': 'text/plain;charset=utf-8'
                });
                res.end('500 服务器错误');
                return;
            }
            res.statusCode = 200;
            res.setHeader('Content-Type', 'text/html')
            res.end(data);
        })
    } else {
        res.statusCode = 404;
        res.setHeader('Content-Type', 'text/plain;charset=utf-8');
        res.end('404 页面不存在')
    }
});

serve.listen(3333, () => {
    console.log('端口运行!')
});

5:文件流写入、读取

/** 文件流 */
let http = require('http');
let fs = require('fs');

// 读取文件流
let myReadStream = fs.createReadStream(__dirname + '/txt/readMe.txt');
// 写入文件流
let myWriteStream = fs.createWriteStream(__dirname + '/txt/writeMe.txt');
// 将读取的文件流写入到写入文件流
myReadStream.pipe(myWriteStream);
let server = new http.createServer((req, res) => {
    res.statusCode = 200;
    res.setHeader('Content-Type', 'text/plain');
    // 将读取的文件流做为返回结构展示到页面
    myReadStream.pipe(res);
})

const hostname = '127.0.0.1';
const port = 3000;

server.listen(port, hostname);

6:Html、Json文件读取

let http = require('http');
let fs = require('fs');

let server = new http.createServer((req,res) => {
    console.log('客户端向服务端发送请求:' + req.url);
    if(req.url !== "/favicon.icon"){
        res.statusCode = 200;
        // res.setHeader('Content-Type','text/html');     // html文件表头设置
        res.setHeader('Content-Type','application/json');  // json文件表头设置
        // 读取文件流
        // let myReadStream = fs.createReadStream(__dirname + '/index.html','utf8'); // node读取html文件
        let myReadStream = fs.createReadStream(__dirname + '/person.json','utf8');  // node读取json文件

        myReadStream.pipe(res);
    }
});

server.listen(8888,'127.0.0.1');

7:路由 Router

let http = require('http');
let fs = require('fs');

let server = new http.createServer((req,res) => {
    if(req.url !== "/favicon.icon"){
        res.statusCode = 200;
        res.setHeader('Content-Type','text/html');     // html文件表头设置

        // 判断用户访问的页面地址
        if(req.url === '/home' || req.url === '/'){
            fs.createReadStream(__dirname + '/index.html','utf8').pipe(res);
        }else if(req.url === '/about'){
            fs.createReadStream(__dirname + '/about.html','utf8').pipe(res);
        }else if(req.url === '/api/docs'){
            // fs.createReadStream(__dirname + '/api/docs.html','utf8').pipe(res); 
            let datas = [{name:"Kebi",age:34,job:"NBA"}];   
            res.setHeader('Content-Type','application/json');
            res.end(JSON.stringify(datas));      
        }
    }
});

server.listen(8888,'127.0.0.1');

8:express框架及路由参数

/* express框架 */

/* 
*   1:已经封装好服务器
*   2:已经封装好路由
*   3:已经封装中间件
*   4:已经封装好网络请求
*/


// 引入express模块
const express = require('express');

// 实例化app对象
let app = express();

// 根据用户请求的地址,返回对应的数据信息
app.get("/",function(req,res){
    console.log(req.url);  // 打印当前请求地址
    res.send("This is home page!");
});

app.get("/contact",function(req,res){
    console.log(req.url);
    res.send("This is contact page!");
});

// 路由参数  用途:根据路由参数展示不同的页面信息
app.get("/profile/:id",function(req,res){
    res.send("您所访问的路径参数为:" + req.params.id);
});

app.listen("8888");

9:ejs 模板引擎、公共js及css文件提取及调用

                                        <!-- app.js -->


/* 
*   EJS模板引擎特点
* 1:快速编译和渲染
* 2:简单的模板标签
* 3:支持浏览器端和服务器端
* 4:支持express视图系统
*/


// 引入express模块
const express = require('express');

// 实例化app对象
let app = express();

// 配置视图引擎
app.set("view engine","ejs");

// 让服务器识别外部样式表
app.use('/assets',express.static('assets'));

// 根据用户请求的地址,返回对应的数据信息  res.send()  返回文本信息     res.sendFile() 返回html页面   res.render() 返回配置的ejs文件
app.get("/",function(req,res){
    res.render("index.ejs");
});

app.get("/contact",function(req,res){
    res.render("contact.ejs");
});



app.listen("8888");

                                        <!-- index.ejs -->



<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>首页</title>
    <link rel="stylesheet" href="../assets/style.css">
</head>
<body>
    <% include ../public/nav.ejs %>
    <h1>这里是Home页面!</h1>
    <p>Welcome to the best website!</p>
</body>
</html>



                                        <!-- contact.ejs -->



<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>联系我们</title>
    <link rel="stylesheet" href="../assets/style.css">
</head>
<body>
    
    <% include ../public/nav.ejs %>
    <h1>这里是Contact页面!</h1>
    <p>tel: 88888888888</p>
</body>
</html>

10:静态文件设置、访问路径重定向

const path = require('path');
const express = require('express');

const port = 5001;
const app = express();

const subPaths = ['support/api/dev/js/summary', 'support/product', 'support/api', 'support/tool', 'support/ask'];

subPaths.forEach(item => {
    console.log(item);
    app.get("/" + item + '*', (req, res) => {
        console.log(path.resolve(__dirname,'support/app', 'html/index.html'))
        res.sendFile(path.resolve(__dirname,'support/app', 'html/index.html'));
    });
});

// 静态文件设置
app.use('/support', express.static('support'));
// app.use('/demo', express.static(paths.demoPath));
// app.use('/dist', express.static(paths.distPath));
// app.get("/support", (req, res) => {
//     res.redirect('/support/api/dev/js/summary');
// }); 

// 访问路径重定向设置
app.get("/", (req, res) => {
    res.redirect('/support/api/dev/js/summary');
});
const server = app.listen(port, () => {
    const host = '127.0.0.1'
    const port = server.address().port
    console.log("访问地址为 http://%s:%s/", host, port);
});

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值