【Nodejs笔记】nodejs入门简介
公司项目用到了vue和nodejs…ㅠㅠ
又要学新的开发语言了…^^;;
今天看着资料简单的整理了概念,然后搭建了一个http服务。
1.nodejs
先看看nodejs在维基百科里是怎么解释的。
Node.js 是能够在服务器端运行 JavaScript 的开放源代码、跨平台执行环境。
Node.js 大部分基本模块都用 JavaScript 语言编写。在 Node.js 出现之前,JavaScript 通常作为客户端程序设计语言使用,
以JavaScript 写出的程序常在用户的浏览器上执行。
Node.js 的出现使 JavaScript 也能用于服务端编程。
Node.js 含有一系列内置模块,使得程序可以脱离 Apache HTTP Server 或 IIS,作为独立服务器执行。
2.npm(Node Package Manager)
刚接接触nodejs,可能会对npm和nodejs的关系可能会有些困惑。
npm就是nodejs的包管理器,因为nodejs的核心代码很少,想要处理一些复杂的功能就需要引用第三方引用包。
这个第三方引用包就是npm帮nodejs做管理。
npm是Node.js默认的、用JavaScript编写的软件包管理系统。
nodejs官网: https://nodejs.org/zh-cn/
npm官网: https://npmjs.org/
3.非阻塞处理
Nodejs还有个重要概念,就是非阻塞处理。
Nodejs非阻塞处理,引入了事件驱动模型。
什么是非阻塞处理的事件驱动模型?
一般web服务,接受一个请求,它会线程池里需要找一个空闲的线程,或新开一个线程,执行请求。
等请求处理完以后,它会释放这个线程。
Nodejs是服务器运行时,开一个事件循环(event-loop), 接受请求会放入到处理队列中,等待处理。
如果有新的请求继续放到处理队列中,等处理完请求后,调用回调函数告诉请求已处理完毕。
这种方式,可以让服务器更通畅的处理请求,减少拥塞带来的性能问题。
看下面的例子:
console.log("-------------阻塞-----------");
function updateData1() {
var s = new Date().getTime();
while (new Date().getTime() < s + 3000);
};
updateData1();
console.log("updateData1 done");
console.log("updateData1 process done");
console.log("-------------非阻塞-----------");
function updateData2(done){
setTimeout(() => {
done();
}, 3000);
}
updateData2(function (){ //调用updateData2的时候指定一个回调函数,调用完后执行这个回调函数。
console.log("updateData2 done");
})
console.log("updateData2 process done");
看一下执行结果:
$ node test.js
-------------阻塞-----------
updateData1 done
updateData1 process done
-------------非阻塞-----------
updateData2 process done
updateData2 done
2. http服务搭建
简单的写一个web服务:
config.js(配置信息) =>
const config = {
hostname: '127.0.0.1',
port: 3030
}
exports.config = config;
httpsample.js =>
console.log("------------http test------------");
const http =require('http');
const config = require('./config.js').config; // 引用config文件
const server = http.createServer((req, res) => {
res.statusCode = 200;
res.setHeader('Content-Type', 'text/plain');
switch (req.url) {
case '/':
res.end('Hello Man\n');
break;
case '/home':
res.end('Hello Home\n');
break;
case '/hello':
res.end('Hello World\n');
break;
default:
res.end('invalid url\n');
break;
}
});
server.listen(config.port, config.hostname, () => {
console.log(`server running at http://${config.hostname}:${config.port}/`);
} );
欢迎大家的意见和交流
email: li_mingxie@163.com