NodeJs 异常处理和内存泄漏处理

express() 表示创建express应用程序。简单几行代码其实就可以创建一个应用,如下:

案例一:异常处理,防止程序崩溃案例。

var express = require("express");//require用于在当前模块中加载和使用其他模块;

var app = express(); //创建express应用程序

//app.get(name),get()为获取设置项 name 的值
//express通过匹配请求路径,在做request、response操作
//第一个参数path为请求路径,第二个参数为处理请求的回调函数

////匹配http://localhost:3000/hello做相关req,res的操作
app.get("/hello", function(req, res)){
	res.send("调用成功");
	//返回一个处理的结果字符串。
}

app.listen(3000) //在给定的端口和主机上监听请求,这个和node中http模块的http.createServer(function(){...}).listen()效果一致;


//防止服务器 崩溃的方式,用这种方式,用于处理在运行时我们没有发现的错误
process.on('uncaughtException',  function(err){
	console.log(err.stack)//把错误放在栈中
});

var a = "";
a.hello(); //hello未定义,正常程序会崩溃,但是先前增加了process.on,所以不会崩溃

正常我们会将前两句做异常判断
try{
	var a = "";
	a.hello();
}catch(e){
}

案例二:内存泄漏处理(非自动监听)

var express = require("express");
var app = express();
//因为要处理内存泄漏的问题,我们引入处理内存泄漏的模块
var MemoryLeakManager = require(“”MemoryLeakManager 所在的路径‘’)

class BigData{
	constructor(){
		this.data = "一个超级长的字符串";
	}
}

var buff = [];
//从监听窗口的网页中获取数据
//参数1:监听窗口路径是/hello
//参数2:回调函数,返回给客户端回调的结果:调用成功
app.get("/hello", function(req, res){
	for(var i=0; i<200000; i++){
		buff.push(new BigData())
	}
	res.send("调用成功");
});

app.listen(3000)//监听http://localhost:3000端口的行为

process.on("uncaughtException", function()err{
		console.log(err.stack)//把错误放在栈中
});

//异步处理,10000s后,如果主线程处理完,则执行队列中的setTimeout函数,如果主线程没处理完,则继续等主线程处理完在执行setTimeout函数(所以setTimeout函数可能会超过预定设置的时间10000s)
setTimeout(function(){
	//__dirname表示指向当前.js文件的全路径
	//将内存溢出的情况放在当前js路径下的Leak目录
	MemoryLeakManager .writeMemory(__dirname+"//Leak//")
}, 10000);

在Leak目录下生成的文件 可以进行调试

案例三:内存泄漏处理(自动监听)

var express = require("express");
var app = express();
var MemoryLeakManager = require(“”MemoryLeakManager 所在的路径‘’)

class BigData{
	construct(){
		this.data = "一个超级长的字符串";
	}
}

var buf = [];
//从监听窗口的网页中获取数据
//参数一:路径,监听端口路径
//参数二:回调函数,返回给监听端口的回调结果
app.get("/hello", function(req, res)){
	for(var i=0; i<20000; i++){
		buf.push(new BigData());
	}
	//返回给客户端回调结果
	res.send("调用成功");
}

//监听本地的 3000端口哦
app.listen(3000);

//防止服务器 崩溃的方式,用这种方式,用于处理在运行时我们没有发现的错误
process.on('uncaughtException',  function(err){
	console.log(err.stack)//把错误放在栈中
});


MemoryLeakManager.autoWatchMemory(__dirname+"//Leak//");

打开Leak目录下生成的文件 可以进行调试

//======================
js执行机制
js最大的特点就是单线程执行,所有的任务在执行的过程中都必须等待前一个任务执行完成才能执行.

js将任务分为两种:同步任务和异步任务,同步任务就是之前说后一个任务必须等待前一个任务执行完成才能执行,是在主线程上执行的,而异步任务不会直接进入主线程执行,而是进入任务队列,只有在任务队列通知异步任务可以执行时,才会被推入主线程执行。

猜你喜欢

转载自blog.csdn.net/baidu_19552787/article/details/85052037
今日推荐