zoukankan      html  css  js  c++  java
  • Node.js模块

    每一个Node.js都是一个Node.js模块,包括JavaScript文件(.js)、JSON文本文件(.json)和二进制模块文件(.node)。

    mymodul.js

    function Hello() {
        this.hello = function() {
            console.log('Hello');
        };
    
        this.world = function() {
            console.log('World');
        };
    }
    
    module.exports = Hello;

    index.js

    var Hello = require('./mymodule');
    
    var hello = new Hello();
    
    hello.hello(); // >> Hello
    hello.world(); // >> World

    包用于管理多个模块及其依赖关系,包的根目录必须包含package.json文件,是CommonJS规范用于描述包的文件

    npm是包管理工具

    Node.js Events模块

    所有发出事件的对象都是events.EventEmitter的实例,可以通过require("events");获得event模块

    test4.js

    var http = require('http');
    var server = http.createServer();
    
    server.on('request', function(req, res) {
        res.writeHead(200, { 'Content-Type': 'text/plain' });
        res.write('hello,111');
        console.log('hello,111');
        res.end();
    });
    
    server.on('request', function(req, res) {
        res.writeHead(200, { 'Content-Type': 'text/plain' });
        res.write('hello,222');
        console.log('hello,222');
        res.end();
    });
    
    // 移除绑定的所有监听器
    server.removeAllListeners('request');
    
    server.on('request', function(req, res) {
        res.writeHead(200, { 'Content-Type': 'text/plain' });
        res.write('hello');
        console.log('hello');
        res.end();
    });
    
    server.listen(1337, '127.0.0.1');
    console.log('Server running at http://127.0.0.1:1337/');

    执行node test.js

    在地址栏输入127.0.0.1:1337,即可看到页面上打印出了“hello”字样,说明前面的监听器被移除了,都没有执行,所以没有显示

    console界面也只会输出'hello'字样

    Node.js fs 模块

    使用require('fs')载入fs模块

    模块中所有方法都有同步和异步两种形式

    读取文件

    fs.readFile(filename, [options], callback)

    写入内容到文件

    fs.writeFile(filename, data, [options], callback)

    eg:

    var fs = require('fs'); // 引入fs模块
    
    // 写入文件内容(如果文件不存在会创建一个文件)
    // 写入时会先清空文件
    fs.writeFile('./aa.txt', 'test test aaa',{'flag': 'a'},function(err) {
        if (err) {
            throw err;
        }
    
        console.log('Saved.');
    
        // 写入成功后读取测试
        fs.readFile('./aa.txt', 'utf-8', function(err, data) {
            if (err) {
                throw err;
            }
            console.log(data);
        });
    });

    flag传递的值,r代表读取文件,,w代表写入文件,a代表追加写入文件

    打开文件

    fs.open(path, flags, [mode], callback)

    关闭文件

    fs.close(fd, [callback])

    读文件

    fs.read(fd, buffer, offset, length, position, callback)

    read.js

    var fs = require('fs'); // 引入fs模块
    
    // 打开文件
    fs.open('./aa.txt', 'r', function(err, fd) {
        if (err) {
            throw err;
        }
        console.log('open file success.');
        var buffer = new Buffer(255);
        // 读取文件
        fs.read(fd, buffer, 0, 100, 0, function(err, bytesRead, buffer) {
            if (err) {
                throw err;
            }
            // 打印出buffer中存入的数据
            console.log(bytesRead, buffer.slice(0, bytesRead).toString());
    
            // 关闭文件
            fs.close(fd);
        });
    });

    写文件

    fs.write(fd, buffer, offset, length, position, callback)
    var fs = require('fs'); // 引入fs模块
    
    // 打开文件
    fs.open('./bb.txt', `w`, function(err, fd) {
        if (err) {
            throw err;
        }
        console.log('open file success.');
        var buffer = new Buffer('hello world!!!!!!');
        // 读取文件
        fs.write(fd, buffer, 0, 10, 0, function(err, bytes, buffer) {
            if (err) {
                throw err;
            }
    
            console.log('write success.');
            // 打印出buffer中存入的数据
            console.log(bytes, buffer.slice(0, bytes).toString());
    
            // 关闭文件
            fs.close(fd);
        });
    });

    创建目录

    fs.mkdir(path, [mode], callback)

    mkdir.js

    var fs = require('fs'); // 引入fs模块
    
    // 创建 newdir 目录
    fs.mkdir('./newdir', function(err) {
        if (err) {
            throw err;
        }
        console.log('make dir success.');
    });

    读取文件目录

    fs.readdir(path, callback)

    readdir.js

    var fs = require('fs'); // 引入fs模块
    
    fs.readdir('./newdir', function(err, files) {
        if (err) {
            throw err;
        }
        // files是一个数组
        // 每个元素是此目录下的文件或文件夹的名称
        console.log(files);
    });
    Node.js 的 http 模块

    http模块主要用于创建http server服务

    创建http server

    // 引入http模块
    var http = require('http');
    
    // 创建http server
    http.createServer(function (req, res) {
        res.writeHead(200, {'Content-Type': 'text/plain'});
        res.end('Hello World
    ');
    }).listen(1337, '127.0.0.1');
    
    console.log('Server running at http://127.0.0.1:1337/');

    新建一个文app件夹

    server.js

    //
    // 创建http server
    //
    
    // 加载所需模块
    var http = require('http');
    var url = require('url');
    var fs = require('fs');
    
    // 设置ip和端口
    var host = '127.0.0.1',
        port = 8080;
    
    // 创建http server
    function start(route, handle) {
        // 参数
        // route  判断url是否存在,存在则调用handle处理,不存在则返回404
        // handle 处理不同的url请求
    
        // 处理request请求
        function onRequest(req, res) {
            // 使用url.parse()方法解析url
            // 它会把url string转化为一个object
            // 这样我们就可以很方便的获取url中的host、port、pathname等值了
            var pathname = url.parse(req.url).pathname;
            console.log('Request for ' + pathname + ' received.');
    
            // 判断并处理不同url请求
            // 后面介绍此方法
            route(handle, pathname, res, req);
        }
    
        // 使用http.createSserver()方法创建http server
        // 并传入onRequest()方法
        // 然后使用listen()方法监听指定地址
        http.createServer(onRequest).listen(port, host);
        console.log('Server has started and listening on ' + host + ':' + port);
    }
    
    // 导出 start 方法
    exports.start = start;

    router.js

    var fs = require('fs');
    
    // 路由函数
    // 处理不同url的请求
    // 并返回相应内容
    
    function route(handle, pathname, res, req) {
        console.log('About to route a request for ' + pathname);
    
        // 判断此url是否存在特定处理函数
        // 存在则调用handle处理
        // 不存在则返回404页面
        if (typeof handle[pathname] === 'function') {
            // 后面介绍handle函数
            handle[pathname](res, req);
        } else {
            console.log('No request handler found for ' + pathname);
    
            // 读取404页面
            // 所有页面都存放在view文件夹下
            var content = fs.readFileSync('./views/404.html');
            res.writeHead(404, { 'Content-Type': 'text/html' });
            res.write(content);
            res.end();
        }
    }
    // 导出 route 方法
    exports.route = route;

    requestHandlers.js

    // 处理url请求
    var fs = require('fs');
    // home.html 主页
    function home(res) {
        console.log('Request handler "home" was called.');
    
        // 读取home.html文件
        var content = fs.readFileSync('./views/home.html');
        res.writeHead(200, { 'Content-Type': 'text/html' });
        res.write(content);
        res.end();
    }
    
    // about.html 关于页面
    function about(res) {
        console.log('Request handler "about" was called.');
    
        // 读取about.html文件
        var content = fs.readFileSync('./views/about.html');
        res.write(200, { 'Content-Type': 'text/html' });
        res.write(content);
        res.end();
    }
    // 导出页面处理函数
    exports.home = home;
    exports.about = about;

    main.js

    // 主程序
    // 引入server,router及requestHandler
    var server = require('./server');
    var router = require('./router');
    var requestHandlers = require('./requestHandlers');
    
    // 保存url处理方法
    var handle = {};
    handle['/'] = requestHandlers.home;
    handle['/about'] = requestHandlers.about;
    
    // 启动http server
    server.start(router.route, handle);

    在app文件夹中新建views文件夹,在views文件夹中,新建home.html文件、about.html文件和404.html文件

    执行node main.js

    访问http://127.0.0.1:8080,显示home.html页

    访问http://127.0.0.1:8080/about,显示about.html页

    访问http://127.0.0.1:8080/,的其他页面,显示404.html

  • 相关阅读:
    Xcode 配置常用变量(SRCROOT, PROJECT_DIR, PROJECT_NAME)
    Git submodule实战
    Charles抓Https的包
    Vue-Quill-Editor 富文本编辑器的使用
    vue计算属性无法监听到数组内部变化
    移动端键盘弹起导致底部按钮上浮解决方案
    js中数组删除 splice和delete的区别,以及delete的使用
    js实现复制input的value到剪切板
    treetable
    vue中状态管理vuex的使用分享
  • 原文地址:https://www.cnblogs.com/baby123/p/5212862.html
Copyright © 2011-2022 走看看