【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!');
}
else
res.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()
【NodeJS】基础知识的更多相关文章
- 前端知识体系-NodeJS相关】NodeJS基础知识全面总结
NodeJS基础知识 1. Node的全局对象和全局变量 1.1 全局对象:所有模块都可以调用的 global:表示Node所在的全局环境,类似于浏览器的window对象. process:该对象表示 ...
- nodejs基础知识查缺补漏
1. 单线程.异步I/O.对比php nodejs是单线程的,但是是异步I/O,对于高并发时,它也能够快速的处理请求,100万个请求也可以承担,但是缺点是非常的耗内存,但是我们可以加大内存, 所以能用 ...
- Nodejs 基础知识 浅析
1. 模块化 ①常用模块化规范 CommonJS + nodejs AMD(Asynchronous Module Definition) + RequireJS CMD(Common Module ...
- NodeJs 基础知识
1.网站 http://nodejs.cn/ 下载最新NodeJs并且安装2. 你可以输入一个新命令“node”.使用该“node”命令有两种不同的方法.第一种不带任何参数,将打开一个交互式Shell ...
- 21.Nodejs基础知识(下)——2019年12月16日
2019年10月04日16:56:23 7. 模块 7.1 暴露一个类,字段 var bar = require("./bar.js"); var msg = "你好&q ...
- 20.Nodejs基础知识(上)——2019年12月16日
2019年12月16日18:58:55 2019年10月04日12:20:59 1. nodejs简介 Node.js是一个让JavaScript运行在服务器端的开发平台,它让JavaScript的触 ...
- NodeJS基础知识
console.log方法: console.log("This is a test string"); node app.js 使用重定向标准输出流: node app.js 1 ...
- 1.nodejs权威指南--基础知识
1. 基础知识 1.1 全局作用域及函数 1.1.1 全局作用域 在nodejs中,定义了一个global对象,代表nodejs中的全局命名空间,任何全局变量.函数或对象都是该对象的一个属性值 1.1 ...
- nodejs+gulp+webpack基础知识
nodejs+gulp+webpack基础知识 2019年08月22日 11:49:40 天府云创 阅读数 22 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文 ...
随机推荐
- 面试题-浅谈JavaScript中的This指向问题
各位小伙伴在面试中被面试官问道this指向问题一定不少吧,同时还被问道apply,call和bind的用法区别,现在,就来简单的聊一聊this到底指向何方. 1.基本概念 MDN的官方解释:与其他语言 ...
- 十问 JVM
今天我们来讨论下 Java 虚拟机,通过一系列常见的问题来逐渐深入了解 JVM 创建对象过程,内存布局,类加载以及 GC 回收算法等机制. 十问 JVM 问题整理: Java虚拟机创建对象的过程 (使 ...
- 游戏AI之模糊逻辑(4)
目录 人类的逻辑 模糊变量 模糊集合 模糊规则 模糊推理 去模糊化 库博方法 结语 if(condition) then dosomething... 这次主要围绕的是游戏AI该如何模仿人类地判断条件 ...
- SpringCloud分布式微服务搭建(二)
这个例子主要是将zuul和eureka结合起来使用,zuul作为反向代理,同时起到负载均衡的作用,同时网关后面的消费者也作为服务提供者,同时提供负载均衡. 一.API网关(摘自百度) API网关是一个 ...
- 在编写Arcgis Engine 过程中对于接口引用和实现过程过产生的感悟
Engine10.2版本 在vs里面新建类GeoMaoAO,并定义接口,在class中定义并实现,如下代码 以平时练习为例,我定义了一个接口,在里面定义了许多的控件,并在类中想要实现这一接口.如果在v ...
- SQL 横转竖 、竖专横(转载) 列转行 行转列
普通行列转换 问题:假设有张学生成绩表(tb)如下: 姓名 课程 分数 张三 语文 张三 数学 张三 物理 李四 语文 李四 数学 李四 物理 想变成(得到如下结果): 姓名 语文 数学 物理 --- ...
- PoolEntry 参数讲解
public abstract class PoolEntry<T, C> { private final String id; private final T route; //路由 p ...
- JDK1.8-Java虚拟机运行时数据区域和HotSpot虚拟机的内存模型
目录 介绍 官方文档规定的运行时数据区域 程序计数器 Java虚拟机栈 本地方法栈 虚拟机栈和本地方法栈溢出 Java堆 演示堆内存溢出 方法区 运行时常量池 演示方法区溢出 HotSpot虚拟机的内 ...
- 学习笔记—HTML基础标签
HTML的概念 概念: HTML 是用来描述网页的一种语言. HTML 指的是超文本标记语言 (Hyper Text Markup Language) HTML 不是一种编程语言,而是一种标记语言 ( ...
- solr搭建(linux)
Solr版本:7.4.0 Tomcat版本:8.5 Jdk版本:1.8 最好在root用户下进行操作,为了更方便初学者理解,选用ubuntu操作,当然用命令操作过程是一样的,会命令操作的话看懂图形化操 ...