Nodejs入门级基础+实战
这篇随笔将会按序记录如下内容:
- NodeJs 简介 安装
- NodeJs HTTP 模块、URL 模块
- CommonJs 和 Nodejs 中自定义模块
- NodeJs FS 模块
- 利用 HTTP 模块 URl 模块 PATH 模块 FS模块创建一个 WEB 服务器(基础实战)
- 关于Node.js的非阻塞IO,异步,事件驱动基础
cnpm淘宝镜像:npm install -g cnpm --registry=https://registry.npm.taobao.org
1.NodeJs简介 安装 开发工具配置
Nodejs介绍
Node优势
I.NodeJs 语法完全是 js 语法,只要懂 JS 基础就可以学会 Nodejs 后端开发。
这打破了过去 JavaScript 只能在浏览器中运行的局面。前后端编程环境统一,可以大大降低开发成本。
II.NodeJs 超强的高并发能力。
Node.js 的首要目标是提供一种简单的、用于创建高性能服务器及可在该服务器中运行的各种应用程序的开发工具。在 Java、PHP 或者.net 等服务器端语言中,会为每一个客户端连接创建一个新的线程。而每个线程需要耗费大约 2MB 内存。也就是说,理论上,一个 8GB 内存的服务器可以同时连接的最大用户数为 4000 个左右,而Node.js 不为每个客户连接创建一个新的线程,而仅仅使用一个线程。当有用户连接了,就触发一个内部事件,通过非阻塞 I/O、事件驱动机制,让 Node.js 程序宏观上也是并行的。使用 Node.js,一个 8GB内存的服务器,可以同时处理超过 4 万用户的连接。
III.实现高性能服务器。
严格地说,Node.js 是一个用于开发各种 Web 服务器的开发工具。在 Node.js 服务器中,运行的是高性能 V8JavaScript 脚本语言,该语言是一种可以运行在服务器端的 JavaScript 脚本语言。那么,什么是 V8 JavaScript 脚本语言呢?该语言是一种被 V8 JavaScript 引擎所解析并执行的脚本语言。V8JavaScript 引擎是由 Google 公司使用 C++语言开发的一种高性能 JavaScript 引擎,该引擎并不局限于在浏览器中运行。Node.js 将其转用在了服务器中,并且为其提供了许多附加的具有各种不同用途的 API。例如,在一个服务器中,经常需要处理各种二进制数据。在 JavaScript 脚本语言中,只具有非常有限的对二进制数据的处理能力,而 Node.js 所提供的 Buffer 类则提供了丰富的对二进制数据的处理能力。另外,在 V8 JavaScript 引擎内部使用一种全新的编译技术。这意味着开发者编写的高端的 JavaScript 脚本代码与开发者编写的低端的 C语言具有非常相近的执行效率,这也是 Node.js 服务器可以提供的一个重要特性。
Node环境的搭建
2.NodeJs HTTP 模块、URL 模块
I.Node.js 创建第一个应用
var http = require("http");
var http = require('http');
http.createServer(function (request, response) {
// 发送 HTTP 头部
// HTTP 状态值: 200 : OK
//设置 HTTP 头部,状态码是 200,文件类型是 html,字符集是 utf8
response.writeHead(200,{"Content-Type":"text/html;charset=UTF-8"});
// 发送响应数据 "Hello World"
res.end("这是第一个node应用");
}).listen(3000);
node xxx.js
II.HTTP 模块、URL 模块
//引用模块
var http = require("http");
//创建一个服务器,回调函数表示接收到请求之后做的事情
var server = http.createServer(function(req,res){
//req 参数表示请求,res 表示响应
console.log("服务器接收到了请求" + req.url);
res.end(); // End 方法使 Web 服务器停止处理脚本并返回当前结果
});
//监听端口
server.listen(3000);
设置一个响应头
//引用模块
var http = require("http");
//创建一个服务器,回调函数表示接收到请求之后做的事情
var server = http.createServer(function(req,res){
//req 参数表示请求,res 表示响应
res.writeHead(200,{"Content-Type":"text/html;charset=UTF8"});//插入响应头
console.log("服务器接收到了请求" + req.url);
res.end(); // End 方法使 Web 服务器停止处理脚本并返回当前结果
});
//监听端口
server.listen(3000);
2.URL 模块的使用
url.parse() //解析 URL
url.format(urlObject) //是上面 url.parse() 操作的逆向操作
url.resolve(from, to) //添加或者替换地址
3.CommonJs 和 Nodejs 中自定义模块
什么是Common.js
Nodejs 中的模块化
// 定义一个 tools.js 的模块
//模块定义
var tools = {
sayHello: function() {
return 'hello NodeJS';
},
add: function(x, y) {
return x + y;
}
};
// 模块接口的暴露
// module.exports = tools;
exports.sayHello = tools.sayHello;
exports.add = tools.add;
var http = require('http');
// 引入自定义的 tools.js 模块
var tools= require('./tools');
tools.sayHello(); //使用模块
npm init 生成 package.json
npm init
package.json内保存了应用信息,比如版本,依赖,环境等。
4.NodeJs FS 模块
!使用前先引入fs模块
const fs = require('fs')
fs.stat('hello.js', (error, stats) =>{
if(error){
console.log(error)
} else {
console.log(stats)
console.log(`文件:${stats.isFile()}`)
console.log(`目录:${stats.isDirectory()}`) }
})
const fs = require('fs')
fs.mkdir('logs', (error) => {
if(error){
console.log(error)
} else {
console.log('成功创建目录:logs') }
})
fs.writeFile('logs/hello.log', '您好 ~ \n', (error) => {
if(error) {
console.log(error)
} else {
console.log('成功写入文件') }
})
fs.appendFile('logs/hello.log', 'hello ~ \n', (error) => {
if(error) {
console.log(error)
} else {
console.log('成功写入文件') }
})
const fs = require('fs')
fs.readFile('logs/hello.log', 'utf8', (error, data) =>{
if (error) {
console.log(error)
} else {
console.log(data)
}
})
const fs = require('fs')
fs.readdir('logs', (error, files) => {
if (error) {
console.log(error)
} else {
console.log(files)
}
})
const fs = require('fs')
fs.rename('js/hello.log', 'js/greeting.log', (error) =>{
if (error) {
console.log(error)
} else {
console.log('重命名成功') }
})
fs.rmdir('logs', (error) =>{
if (error) {
console.log(error)
} else {
console.log('成功的删除了目录:logs') }
})
fs.unlink(`logs/${file}`, (error) => {
if (error) {
console.log(error)
} else {
console.log(`成功的删除了文件: ${file}`) }
})
const fs = require('fs')
var fileReadStream = fs.createReadStream('data.json')
let count=0;
var str='';
fileReadStream.on('data', (chunk) => {
console.log(`${ ++count } 接收到:${chunk.length}`);
str+=chunk
})
fileReadStream.on('end', () => {
console.log('--- 结束 ---');
console.log(count);
console.log(str);
})
fileReadStream.on('error', (error) => {
console.log(error)
})
var fs = require("fs");
var data = '我是从数据库获取的数据,我要保存起来';
// 创建一个可以写入的流,写入到文件 output.txt 中
var writerStream = fs.createWriteStream('output.txt');
// 使用 utf8 编码写入数据
writerStream.write(data,'UTF8');
// 标记文件末尾
writerStream.end();
// 处理流事件 --> finish 事件
writerStream.on('finish', function() { /*finish - 所有数据已被写入到底层系统时触发。*/
console.log("写入完成。");
});
writerStream.on('error', function(err){
console.log(err.stack);
});
console.log("程序执行完毕");
var fs = require("fs");
// 创建一个可读流
var readerStream = fs.createReadStream('input.txt');
// 创建一个可写流
var writerStream = fs.createWriteStream('output.txt');
// 管道读写操作
// 读取 input.txt 文件内容,并将内容写入到 output.txt 文件中
readerStream.pipe(writerStream);
console.log("程序执行完毕");
5.Node.js 搭建静态WEB服务器
待更新
6.关于Node.js的非阻塞IO,异步,事件驱动基础
Nodejs 的单线程 非阻塞 I/O 事件驱动:
Nodejs 回调处理异步:
//正确的处理异步:
function getData(callback){
//模拟请求数据
var result='';
setTimeout(function(){
result='这是请求到的数据';
callback(result);
},200);
}
getData(function(data){
console.log(data);
})
Nodejs events 模块处理异步:
// 引入 events 模块
var events = require('events');
var EventEmitter=new events.EventEmitter(); /*实例化事件对象*/
EventEmitter.on('toparent',function(){
console.log('接收到了广播事件');
})
setTimeout(function(){
console.log('广播');
EventEmitter.emit('toparent'); /*发送广播*/
},1000)
Nodejs入门级基础+实战的更多相关文章
- 【精编重制版】JavaWeb 入门级项目实战 -- 文章发布系统 (第二节)
说明 本教程是,原文章发布系统教程的精编重制版,会包含每一节的源码,以及修正之前的一些错误.因为之前的教程只做到了评论模块,很多地方还不完美,因此重制版会修复之前的一些谬误和阐述不清的地方,而且,后期 ...
- javamail模拟邮箱功能发送电子邮件-基础实战篇(javamail API电子邮件实例)
引言: JavaMail 是一种可选的.能用于读取.编写和发送电子消息的包 JavaMail jar包下载地址:http://java.sun.com/products/javamail/downlo ...
- MySQL的初次见面礼基础实战篇
[版权申明] http://blog.csdn.net/javazejian/article/details/61614366 出自[zejian的博客] 关联文章: MySQL的初次见面礼基础实战篇 ...
- nodejs调试基础【转载】
nodejs调试基础[转载] 看到了一片不错的文章: 作者:前端求生之路 链接:nodejs调试基础[转载]
- python基础 实战作业 ---Excel基本读写与数据处理
代码地址如下:http://www.demodashi.com/demo/11650.html 看完本篇需要: 10min 作业练习需要: 0.5h~3h(依练习者对python熟悉程度而定) 看完本 ...
- Spring Cloud Alibaba | Sentinel:分布式系统的流量防卫兵基础实战
Spring Cloud Alibaba | Sentinel:分布式系统的流量防卫兵基础实战 Springboot: 2.1.8.RELEASE SpringCloud: Greenwich.SR2 ...
- Linux Capabilities 入门教程:基础实战篇
该系列文章总共分为三篇: Linux Capabilities 入门教程:概念篇 Linux Capabilities 入门教程:基础实战篇 待续... 上篇文章介绍了 Linux capabilit ...
- python基础实战之猜年龄游戏
目录 一.Python基础实战之猜年龄游戏 给定年龄,用户可以猜三次年龄 年龄猜对,让用户选择两次奖励 用户选择两次奖励后可以退出 age = 18 # 答案 count = 0 # 游戏次数控制 p ...
- Capabilities 入门教程:基础实战篇
该系列文章总共分为三篇: Linux Capabilities 入门教程:概念篇 Linux Capabilities 入门教程:基础实战篇 待续... 上篇文章介绍了 Linux capabilit ...
随机推荐
- git 查看文件修改
查看某个文件的修改历史: 用git log -p filename. git blame filename是查看目前的每一行是哪个提交最后改动的. 查看某次提交修改列表: git show 版本号 ...
- 浏览器HTML自带懒加载技术
对于目前的图片懒加载,我们一般采用的是通过第三方库或懒加载库来实现,但是该方式的显著问题就是,必须按顺序执行: 1.加载初始的 HTML 响应内容 2.加载懒加载库 3.加载图片 假如浏览器能直接支持 ...
- 支持跨域的html元素
image javascript iframe link
- elk 解决浏览器跨域问题
1.执行命令: docker pull sebp/elk 将镜像pull到本地来: 2.执行命令: docker run -p 5601:5601 -p 9200:9200 -p 5044:5044 ...
- WebAPI 生成验证码
private HttpResponseMessage CreateCheckCodeImage(string checkCode) { HttpResponseMessage result = ne ...
- 第11篇Kubernetes部署微服务电商平台
kubernetes部署sock-shop微服务电商平台: 准备条件 确保kubernetes可以访问:reg.yunwei.edu镜像库 需要准备镜像: 部署微服务 ...
- 所有anaconda安装包失败的解决办法汇总
多试几次,有时候网络不稳定下载一半会停掉 更改Pip源 pip install scrapy -i https://pypi.tuna.tsinghua.edu.cn/simple 1.首先确认镜像源 ...
- shell脚本相关关系、浮点、循环
将一堆命令放在脚本里变成可执行脚本执行: 脚本编写,文件名为.sh,获取hostname的主机名 系统变量: Env:查看系统变量 Set :打印所有变量可以和grep和用 Export path:定 ...
- mui使用总结
mui是一个高性能的HTML5开发框架,从UI到效率,都在极力追求原生体验:这个框架自身有一些规则,刚接触的同学不很熟悉,特总结本文:想了解mui更详细的信息,请访问mui官网 DOM结构 关于mui ...
- testNG之异常测试
@Test(expectedExceptions = ) 在测试的时候,某些用例的输入条件,预期结果是代码抛出异常,那么这个时候就需要testNG的异常测试,先看一段会抛出异常的代码 exceptio ...