nodejs基础

nodejs允许自己封装模块,使得编写程序可以模块化,便于维护整理。在一个js文件中写完封装的函数或对象后,可以使用exportsmodule.exports来将模块中的函数暴露给程序,使得整个程序可以使用,如:

function HelloWorld() {return 'Hello, node-js!';
}module.exports.HelloWorld = HelloWorld;

要使用其他模块中的方法时,需要使用require来导入模块,如:

const http = require('http');
const helloWorld = require('./helloword');

再说回exportsmodule.exports,两者的功能相同,区别在于,exportsmodule.exports的缩略写法,如下写法是相同意思:

module.exports.HelloWorld = HelloWorld;
exports.HelloWorld = HelloWorld;

创建简单的nodejs服务器

nodejs封装由http模块实现服务器功能,只需引入使用即可,代码如下:

const http = require('http');
const helloWorld = require('./helloword');var server = http.createServer(function(req, res) {if (req.method != 'GET') {res.statusCode = 404;res.end('Please Use GET method!');}elseres.end(helloWorld.HelloWorld());
});server.listen(30000);
console.log('Server is started on 30000 port……');

先导入http模块,然后使用createServer方法,在方法中传入回调函数来处理用户请求。
回调函数由两个参数reqres,代表着请求和响应。
req的属性有:req.methodreq.urlres可以使用setHeader('http响应头','参数')方法来设置响应头参数,使用res.statusCode = 200来设置响应状态码
在回调函数的最后,需要调用res.end()来结束回调函数的响应。

创建静态文件服务器

要搭建静态文件服务器,需要将引入nodejs自带的fs模块进行文件的读取,并将读取到的文件数据以数据流的形式传输到浏览器端,代码如下:

const http = require('http');
const url = require('url');
const fs = require('fs');
const path = require('path');const root = __dirname;var server = http.createServer(function(req, res) {var filePath = path.join(root, url.parse(req.url).pathname);var stream = fs.createReadStream(filePath);// stream.on('data', function(chunk) {//   res.write(chunk);  // })// stream.on('end', function() {//   res.statusCode = 200;//   res.end();  // })stream.pipe(res);
});server.listen(3000);
console.log('Server is started on 3000 port……');

一步步来分析,__dirname为nodjs中的一个自带的属性变量,值为当前js文件所在的目录路径,在使用url模块的parse方法后,提取其中的pathname,使用path.join()方法将其组合成访问文件的绝对路径来对文件进行读取。不过这里需要一个异常处理,否则若访问文件不存在,没有异常处理则程序异常退出。

    stream.on('error', function(err){...})

使用fs.createReadStream()方法来创建读取文件数据流,这时有两种方法对文件数据进行读取:

var stream = fs.createReadStream(filePath);// 1.stream.on('data', function(chunk) {res.write(chunk);  })stream.on('end', function() {res.statusCode = 200;res.end();  })// 2.stream.pipe(res);

第一种方法为设置事件监听器,写入回调函数,在on('data',function(){})中将文件数据块写入响应,在on('data',function(){})中结束响应处理
第二中方法为nodejs的高级机制,创建数据流后通过pipe()函数将数据流用管道接到WriteStream,且会在其中自动调用res.end()功能。任何ReadStream都能通过pipe()接到WriteStream中。

Events

Node.js有多个内置的事件,我们可以通过引入events模块,并通过实例化EventEmitter类来绑定和监听事件,如下:

var event = require('events');
var eventEmitter = new events.EventEmitter();
var eventHandler = function(args){...};
eventEmitter.on('eventName',eventHandler);
eventEmitter.emit('eventName',args...);

Buffer

Buffer类用于在 TCP 流或文件系统操作等场景中处理字节流。
官方建议构造方法:

  • Buffer.from(buffer)
  • Buffer.from(array)
  • Buffer.from(string[,encoding])
  • Buffer.alloc(size)
  • Buffer.allocUnsafe(size)

Buffer对象的操作方法:

  • write(string[, offset[, length]][, encoding])
  • toString([encoding[, start[, end]]])
    • ascii
    • utf8
    • base64
    • hex
  • toJSON()

Stream

Stream 是一个抽象接口,Node 中有很多对象实现了这个接口。
所有Stream对象都是EventEmitter的实例。常用事件:

  • data
  • end
  • finish
  • error

pipe()方法可将从writeStream流到另一个流中,且可以链式调用,如下:

var fs = require('fs')
fs.createReadStream('input.txt').pipe(fs.createWriteStream('output.txt'))

url && querystring

url模块和querystring模块用来解析请求的url和GET和POST的参数
url用法:

var url = require('url')
url.parse(string)
====================================================url.parse(string).query|url.parse(string).pathname      ||                   ||                   |------ -------------------
http://localhost:8888/start?foo=bar&hello=world

全局对象

名字 作用
__filename 当前正在执行的脚本的文件名
__dirname 当前执行脚本所在的目录
setTimeout(cb,ms) 在指定的毫秒(ms)数后执行指定函数(cb),只执行一次
clearTimeout(t) 停止一个之前通过 setTimeout() 创建的定时器
setInterval(cb,ms) 指定的毫秒(ms)数后执行指定函数(cb)。返回一个代表定时器的句柄值。不停调用函数
console 控制台标准输出,主要使用log方法

util

util 是一个Node.js 核心模块,提供常用函数的集合。
util.inspect(object): 输出object详细属性。

fs

Node.js提供文件操作API,通过引入fs模块使用。
读取文件:同步readFileSync()|异步readFile()
写入文件:fs.writeFile(file, data[, options], callback)
打开文件:fs.open()

转载于:https://www.cnblogs.com/y4ngyy/p/10250885.html

【NodeJS】基础知识相关推荐

  1. 服务器部署基础知识_我在生产部署期间学到的知识

    服务器部署基础知识 by Shruti Tanwar 通过Shruti Tanwar 我在生产部署期间学到的知识 (What I learned during production deploymen ...

  2. IM开发基础知识补课(四):正确理解HTTP短连接中的Cookie、Session和Token

    1.前言 众所周之,IM是个典型的快速数据流交换系统,当今主流IM系统(尤其移动端IM)的数据流交换方式都是Http短连接+TCP或UDP长连接来实现.Http短连接主要用于从服务器读取各种持久化信息 ...

  3. (七)JS基础知识四(搞定异步)【三座大山之三,必考!!!】

    JS基础知识四(异步) 提问 单线程 应用场景 callback hell和promise 提问 同步和异步的区别是什么 手写用Promise加载一张图片 前端使用的异步的场景有哪些 单线程 JS是单 ...

  4. 你应该知道的 Node 基础知识

    大家好,我是若川.最近组织了源码共读活动,感兴趣的可以加我微信 ruochuan12 参与,已进行两个多月,大家一起交流学习,共同进步.源码共读学的多数是 Node.js ,今天分享一篇 Node.j ...

  5. web前端开发基础知识_前端开发是什么?学前端开发需要学什么语言?你想成为程序员吗?...

    Web前端是什么 前端的本质就是通过一定的程序代码来实现用户界面的ui 交互.可以认为用户在终端所看到的和所操作的都属于前端,也就是说分为渲染页面和处理用户操作两块. 前端开发是创建Web页面或app ...

  6. HTML5的基础知识整理

    HTML5 概述:HTML5是HTML最新的修订版本,2014年10月由万维网联盟(W3C)完成标准制定. HTML5的设计目的是为了在移动设备上支持多媒体. 文章目录 HTML5 前言 一.HTMl ...

  7. npm重要基础知识总结

    最新内容,请在github阅读 npm基础知识总结 1.我们的模块都会在系统下缓存 C:\Users\Administrator\AppData\Roaming\npm-cache\registry. ...

  8. 从零开始学前端 - 1. HTML基础知识

    作者: 她不美却常驻我心 博客地址: https://blog.csdn.net/qq_39506551 微信公众号:老王的前端分享 每篇文章纯属个人经验观点,如有错误疏漏欢迎指正.转载请附带作者信息 ...

  9. echarts结合react开发基础知识学习

    echarts基础知识学习 1.echarts简介 ECharts,一个使用 JavaScript 实现的开源可视化库,兼容当前绝大部分浏览器(IE8/9/10/11,Chrome,Firefox,S ...

  10. 利用AST对抗js混淆(一) 基础知识

    准备工作: 1.网站及工具 JavaScript Obfuscator Tool   主要研究对象,主要是研究此网站的各种混淆方法及破解办法. JS NICE: Statistical renamin ...

最新文章

  1. ZooKeeper的基本原理
  2. 项目性能优化(MySQL读写分离、MySQL主从同步、Django实现MySQL读写分离)
  3. MySQL时间增加、字符串拼接
  4. 操作系统就是一个“死循环”?
  5. micronet 测试2
  6. C#程序出现内存溢出错误的解决办法
  7. Matlab中求数据概率分布的方法
  8. 鸿蒙是内核名字,华为徐直军:鸿蒙只是内核的名字,是媒体给误解成操作系统...
  9. linux ns级定时器_linux用户空间获得ns纳秒级时间示例
  10. 上传 mp4 格式判断_视频如何转换成通用的MP4格式?按下这个键,10秒就能搞定...
  11. OpenCV3学习(12.3) kalman滤波器
  12. PartitionStateMachine分析
  13. 霍金临终论文公开:揭秘沉入黑洞的信息去向
  14. [原译]一步步教你制作WPF圆形玻璃按钮
  15. 腾讯广点通DMP广告数据提交回传对接方法解析
  16. Cesium隐藏太阳、月亮、大气【图说GIS】
  17. 中文、\uxxxx、\x xx、base64的相互转码
  18. cmd窗口执行cnpm报错记录:FullyQualifiedErrorId : UnauthorizedAccess或者因为在此系统上禁止运行脚本。有关详细信息,请参阅https。。
  19. 用JS操作FRAME中的IFRAME及其内容
  20. Language Models are Unsupervised Multitask Learners 论文纪要

热门文章

  1. 推荐下载:Windows 7 Ultimate (x86/x64) MSDN简体中文旗舰版
  2. leetcode/剑指Offer05.替换空格 双指针法实现原地替换
  3. 彻底理解程序为什么会超时
  4. Lightroom Classic 教程,如何在 Lightroom 中更高效的获取快速提示?
  5. Mac电脑上非常好用的英汉互译词典软件
  6. 一些没啥意思的出题想法记录
  7. django、tornado、flask对比
  8. 跟小静学MVC3[03]--相关语法特性小补习
  9. ***php调试总结
  10. Linux与FreeBSD的多网卡绑定增加服务器流量