【NodeJS】基础知识
nodejs基础
nodejs允许自己封装模块,使得编写程序可以模块化,便于维护整理。在一个js文件中写完封装的函数或对象后,可以使用exports
或module.exports
来将模块中的函数暴露给程序,使得整个程序可以使用,如:
function HelloWorld() {return 'Hello, node-js!';
}module.exports.HelloWorld = HelloWorld;
要使用其他模块中的方法时,需要使用require
来导入模块,如:
const http = require('http');
const helloWorld = require('./helloword');
再说回exports
和module.exports
,两者的功能相同,区别在于,exports
是module.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
方法,在方法中传入回调函数来处理用户请求。
回调函数由两个参数req
和res
,代表着请求和响应。
req
的属性有:req.method
、req.url
。res
可以使用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】基础知识相关推荐
- 服务器部署基础知识_我在生产部署期间学到的知识
服务器部署基础知识 by Shruti Tanwar 通过Shruti Tanwar 我在生产部署期间学到的知识 (What I learned during production deploymen ...
- IM开发基础知识补课(四):正确理解HTTP短连接中的Cookie、Session和Token
1.前言 众所周之,IM是个典型的快速数据流交换系统,当今主流IM系统(尤其移动端IM)的数据流交换方式都是Http短连接+TCP或UDP长连接来实现.Http短连接主要用于从服务器读取各种持久化信息 ...
- (七)JS基础知识四(搞定异步)【三座大山之三,必考!!!】
JS基础知识四(异步) 提问 单线程 应用场景 callback hell和promise 提问 同步和异步的区别是什么 手写用Promise加载一张图片 前端使用的异步的场景有哪些 单线程 JS是单 ...
- 你应该知道的 Node 基础知识
大家好,我是若川.最近组织了源码共读活动,感兴趣的可以加我微信 ruochuan12 参与,已进行两个多月,大家一起交流学习,共同进步.源码共读学的多数是 Node.js ,今天分享一篇 Node.j ...
- web前端开发基础知识_前端开发是什么?学前端开发需要学什么语言?你想成为程序员吗?...
Web前端是什么 前端的本质就是通过一定的程序代码来实现用户界面的ui 交互.可以认为用户在终端所看到的和所操作的都属于前端,也就是说分为渲染页面和处理用户操作两块. 前端开发是创建Web页面或app ...
- HTML5的基础知识整理
HTML5 概述:HTML5是HTML最新的修订版本,2014年10月由万维网联盟(W3C)完成标准制定. HTML5的设计目的是为了在移动设备上支持多媒体. 文章目录 HTML5 前言 一.HTMl ...
- npm重要基础知识总结
最新内容,请在github阅读 npm基础知识总结 1.我们的模块都会在系统下缓存 C:\Users\Administrator\AppData\Roaming\npm-cache\registry. ...
- 从零开始学前端 - 1. HTML基础知识
作者: 她不美却常驻我心 博客地址: https://blog.csdn.net/qq_39506551 微信公众号:老王的前端分享 每篇文章纯属个人经验观点,如有错误疏漏欢迎指正.转载请附带作者信息 ...
- echarts结合react开发基础知识学习
echarts基础知识学习 1.echarts简介 ECharts,一个使用 JavaScript 实现的开源可视化库,兼容当前绝大部分浏览器(IE8/9/10/11,Chrome,Firefox,S ...
- 利用AST对抗js混淆(一) 基础知识
准备工作: 1.网站及工具 JavaScript Obfuscator Tool 主要研究对象,主要是研究此网站的各种混淆方法及破解办法. JS NICE: Statistical renamin ...
最新文章
- ZooKeeper的基本原理
- 项目性能优化(MySQL读写分离、MySQL主从同步、Django实现MySQL读写分离)
- MySQL时间增加、字符串拼接
- 操作系统就是一个“死循环”?
- micronet 测试2
- C#程序出现内存溢出错误的解决办法
- Matlab中求数据概率分布的方法
- 鸿蒙是内核名字,华为徐直军:鸿蒙只是内核的名字,是媒体给误解成操作系统...
- linux ns级定时器_linux用户空间获得ns纳秒级时间示例
- 上传 mp4 格式判断_视频如何转换成通用的MP4格式?按下这个键,10秒就能搞定...
- OpenCV3学习(12.3) kalman滤波器
- PartitionStateMachine分析
- 霍金临终论文公开:揭秘沉入黑洞的信息去向
- [原译]一步步教你制作WPF圆形玻璃按钮
- 腾讯广点通DMP广告数据提交回传对接方法解析
- Cesium隐藏太阳、月亮、大气【图说GIS】
- 中文、\uxxxx、\x xx、base64的相互转码
- cmd窗口执行cnpm报错记录:FullyQualifiedErrorId : UnauthorizedAccess或者因为在此系统上禁止运行脚本。有关详细信息,请参阅https。。
- 用JS操作FRAME中的IFRAME及其内容
- Language Models are Unsupervised Multitask Learners 论文纪要
热门文章
- 推荐下载:Windows 7 Ultimate (x86/x64) MSDN简体中文旗舰版
- leetcode/剑指Offer05.替换空格 双指针法实现原地替换
- 彻底理解程序为什么会超时
- Lightroom Classic 教程,如何在 Lightroom 中更高效的获取快速提示?
- Mac电脑上非常好用的英汉互译词典软件
- 一些没啥意思的出题想法记录
- django、tornado、flask对比
- 跟小静学MVC3[03]--相关语法特性小补习
- ***php调试总结
- Linux与FreeBSD的多网卡绑定增加服务器流量