node.js学习-1

    xiaoxiao2021-03-25  181

    Node.js,不是一种语言,而是一种解析Javascript的运行环境,只是运行在服务端。Node.js采用了Google Chrome浏览器的V8引擎,性能很好,同时还提供了很多系统级的API,如文件操作、网络编程等。浏览器端的Javascript代码在运行时会受到各种安全性的限制,对客户系统的操作有限。相比之下,Node.js则是一个全面的后台运行时,为Javascript提供了其他语言能够实现的许多功能。

    API文档地址: http://www.jq-school.com/api/nodejs/api.html

    下面是几个特性: 1.事件驱动,简单的说就是先注册N个回调函数,待发生事件时调用。 2.单线程 没用过这个,最近工作需要,强学。

    安装完开发环境后,先按照例子尝试了一个helloword。

    var http = require('http'); http.createServer(function (request, response) { // 发送 HTTP 头部 // HTTP 状态值: 200 : OK // 内容类型: text/plain response.writeHead(200, {'Content-Type': 'text/plain'}); // 发送响应数据 "Hello World" response.end('Hello World\n'); }).listen(8888); // 终端打印如下信息 console.log('Server running at http://127.0.0.1:8888/');

    对于我这种十年前用过js的准文盲,先温习下大概的js语法。 1.都用var来定

    function foo() {} var a = 0; var b = 'a'; var c = 1.0; var d = foo;

    2.基本数据

    var int1 = 123; var string1 = "3"; var bool1 = false; var list1 = ["1", "2", "3"]; var map1 = { "key1":"value1", "key2":"value2", "key3":"value3" };son子串

    3.json

    var dog = { "pre" : "嘘~", "sub" : { "name" : "蛋花汤", "act" : "在睡觉", "time" : 12 }, "suf" : [ "我说了", "它在睡觉", "就是在睡觉" ] }; console.log(dog.pre);

    4.类 js中的类,严格说就是个函数体,里面的this.不能忽略,忽略了就不算他的成员属性了。要用的时候直接new Object。

    function parentFunc () { this.id = 1; this.childfunc = function childFunc() { return this.id+1; } } var parentFuncObj = new parentFunc(); console.log(parentFuncObj.id); console.log(parentFuncObj.childfunc());

    Node.js 的每一个 API 都是异步的,并作为一个独立线程运行,使用异步函数调用,并处理并发。 异步回调用法:

    var fs = require("fs"); fs.readFile('input.txt', function (err, data) { if (err) return console.error(err); console.log(data.toString()); }); console.log("程序执行结束!");

    readFile是异步读取文件的api。

    EventEmitter 类:

    这个类有点类似于安卓里的addListener后事件触发时激发对应listener的逻辑。

    var EventEmitter = require('events').EventEmitter; var event = new EventEmitter(); //获取一个对象 event.on('some_event', function() { console.log('some_event 事件触发'); }); setTimeout(function() { event.emit('some_event'); }, 1000); //过1秒钟触发some_event

    下面这个就相当于注册了多个listener

    var events = require('events'); var emitter = new events.EventEmitter(); emitter.on('someEvent', function(arg1, arg2) { console.log('listener1', arg1, arg2); }); emitter.on('someEvent', function(arg1, arg2) { console.log('listener2', arg1, arg2); }); emitter.emit('someEvent', 'arg1 参数', 'arg2 参数');

    还有removeListener等函数:

    var events = require('events'); var emitter = new events.EventEmitter(); emitter.on('someEvent', function(arg1, arg2) { console.log('listener1', arg1, arg2); }); var callback = function(arg1, arg2) { console.log('listener2', arg1, arg2); }; emitter.on('someEvent', callback); emitter.emit('someEvent', 'arg1 参数', 'arg2 参数'); emitter.removeListener("someEvent", callback); emitter.emit('someEvent', 'arg1 参数', 'arg2 参数');

    输出:

    listener1 arg1 参数 arg2 参数 listener2 arg1 参数 arg2 参数 listener1 arg1 参数 arg2 参数

    当然还有 removeAllListeners、once等不同用途的方法。

    Node.js Buffer(缓冲区) js在处理二进制信息时,需要用到Buffer这个类。该类用来创建一个专门存放二进制数据的缓存区。 在 Node.js 中,Buffer 类是随 Node 内核一起发布的核心库。Buffer 库为 Node.js 带来了一种存储原始数据的方法,可以让 Node.js 处理二进制数据,每当需要在 Node.js 中处理I/O操作中移动的数据时,就有可能使用 Buffer 库。原始数据存储在 Buffer 类的实例中。一个 Buffer 类似于一个整数数组,但它对应于 V8 堆内存之外的一块原始内存。

    var buf = new Buffer(10); var length = buf.write("asdfasdfazsdfasdf"); console.log("length"+length); console.log( buf.toString('ascii'));

    buffer能自定义初始长度,如果超过了,则只能写初始长度。 具体的其他方法可见api

    模块系统: 那么不同js文件之间,怎么互相调用呢?比如我们写c程序,有export等标识符。这个也有。 比如,我们先写个hello.js

    var text = "hello"; exports.printit = function() { console.log(text); }

    这里的exports代表这个类中的这个函数可以让另外一个模块调用。 然后写个print.js:

    var module = require("./hello"); module.printit();

    这样就行了。

    当然也可以定义成类的模式,一次暴露出多个公共方法:

    function printclass() { var text = "hello"; this.printit = function() { console.log(text); } this.printit2 = function() { console.log(text); } } module.exports = printclass; var module = require("./hello"); newObj = new module() newObj.printit(); newObj.printit2();

    require方法接受以下几种参数的传递: http、fs、path等,原生模块。 ./mod或../mod,相对路径的文件模块。 /pathtomodule/mod,绝对路径的文件模块。 mod,非原生模块的文件模块。

    转载请注明原文地址: https://ju.6miu.com/read-2019.html

    最新回复(0)