node初体验
栏目: JavaScript · 发布时间: 6年前
内容简介:在学习webpack和vue的过程中经常会遇到关于node的知识,CommonJS规范等,所以对于前端来说学习node是非常有必要的,所以就有了这一篇node初体验的文章。这个不多说,在node官网下载安装包直接安装就可以,node预设了npm,npm是一个用javascript写的包管理器,用于管理模块,想了解更多可以到https://www.npmjs.com/上去看,上面有非常多的模块,下面直接进入正文。用node直接撸了一个处理post请求,主要的知识点有函数式编程、路由、阻塞与非阻塞、回调、事件轮
在学习webpack和vue的过程中经常会遇到关于node的知识,CommonJS规范等,所以对于前端来说学习node是非常有必要的,所以就有了这一篇node初体验的文章。
node安装
这个不多说,在node官网下载安装包直接安装就可以,node预设了npm,npm是一个用javascript写的包管理器,用于管理模块,想了解更多可以到https://www.npmjs.com/上去看,上面有非常多的模块,下面直接进入正文。
正文
用node直接撸了一个处理post请求,主要的知识点有函数式编程、路由、阻塞与非阻塞、回调、事件轮询、内部和外部模块等等。
index.js
var server = require('./server.js'),
router = require('./router.js'),
requestHandle = require("./requestHandlers.js"),
handle = {};
handle['/'] = requestHandle.start;
handle['/upload'] = requestHandle.upload;
handle['/start'] = requestHandle.start;
server.start(router.route,handle);
复制代码
server.js
function start(route,handle){
var http = require("http");
var url = require("url");
// 请求
function onRequest(request,respone)
{
var pathname=url.parse(request.url).pathname,
postData="";
request.setEncoding('utf8');
request.addListener('data',function(postDatachunk)
{
postData += postDatachunk;
});
request.addListener('end',function()
{
route(pathname,handle,respone,postData);
});
}
http.createServer(onRequest).listen(8888);
console.log("server is start");
}
//导出函数
exports.start = start;
复制代码
router.js
function route(pathname,handle,respone,postData)
{
console.log('请求来自'+pathname);
if(typeof(handle[pathname]) === 'function')
{
handle[pathname](respone,postData);
}else{
console.log("404 not found");
respone.writeHead(200,{"Content-Type":"text/plain"});
respone.write("404 not found!");
respone.end();
}
}
exports.route = route;
复制代码
requestHandlers.js
var querystring = require('querystring');
function upload(respone,postData)
{
console.log("这个是upload路由");
respone.writeHead(200,{"Content-Type":"text/plain"});
respone.write(querystring.parse(postData).txt);
respone.end();
};
function start(respone)
{
console.log("这个是start路由");
var body = '<html>'+
'<head>'+
'<meta charset="UTF-8">'+
'<style>'+
'#txt{float:left;width: 250px;height: 50px;border-right:none;border-top-left-radius: 3px;border-bottom-left:3px;}'+
'#submit{float:left;border-sizing:border-box;width: 100px;height: 50px;background:skyblue;color: #fff;font-size: 18px;}'+
'</style>'+
'</head>'+
'<body>'+
'<form action="/upload" method="post">'+
'<input type="text" id="txt" name="txt" />'+
'<input type="submit" value="提交" id="submit" name="submit"/>'+
'</form>'+
'</body>'+
'</html>';
respone.writeHead(200,{"Content-Type":"text/html"});
respone.write(body);
respone.end();
};
exports.upload = upload;
exports.start = start;
复制代码
总结
事件轮询(event loop)
JavaScript是一门单线程语言,也就是说如果遇到大量的任务或者耗时任务,线程就会被堵塞,需要等待其执行完毕,这就会造成页面假死等状态,为了解决这个问题,就需要有eventloop线程,简单来说我们可以新建一个eventloop线程负责主线程与其它进程的通信,这样在有大量任务和耗时任务时我们就交给eventloop线程去处理,一般是各种io操作,处理完毕后返回给主线程并执行预先设置的回调函数,这个模式我们就叫做非阻塞模式或者异步模式。 在这次node初体验中,我使用了child_process模块来实现了一个非阻塞操作 代码如下
var exex = require("child_process").exec;
function test(respone)
{
exec("find /",{ timeout : 10000, maxBuffer : 200*1024},function(error,stdout,stderr)
{
respone.writeHead(200,{"Content-Type":"text/plain"});
respone.write(stdout);
respone.end();
});
// 阻塞操作
// var time = new Date().getTime();
// while(new Date().getTime()<time + 30000);
// console.log("xxxxxxxxxxxxxxxxxxxxxxxxxx");
}
复制代码
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 降低云游戏延迟优化云游戏体验:贝塞斯达推出Orion技术,还公布了免费体验计划
- PyTorch 初体验
- indexedDB 初体验
- golang爬虫初体验
- Netty 入门初体验
- Ansible初体验
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
.NET框架程序设计
(美)Jeffrey Richter、(美)Francesco Balena / 李建忠 / 华中科技大学出版社 / 2004-1 / 54.00元
Microsoft.NET框架为简化开发与卫联网无缝连接的应用程序和组件提供了强大的技术支持,如ASP.NET Web窗体、XML Web服务以及Windows窗体。本书的目的在于展示.NET框架中公共语言运行库存的核心内容。全书由两位广受尊敬的开发者/作者完成,并假设读者理解面向对象程序设计的基本概念,如数据抽象、继承和多态。书中内容清楚地解释了CLR的扩展类型系统,CLR如何管理类型的行为,以......一起来看看 《.NET框架程序设计》 这本书的介绍吧!
CSS 压缩/解压工具
在线压缩/解压 CSS 代码
XML 在线格式化
在线 XML 格式化压缩工具