node.js

一、什么是NodeJS
(1)Node.js 是一个基于 Chrome V8 引擎的 JavaScript 的服务器端运行环境。
(2)Node.js 使用了一个事件驱动、非阻塞式 I/O 的模型,使其轻量又高效。

二、我们用NodeJS来干什么?
NodeJS可以构建服务器
(1)接收客户端对静态资源的请求,并返回结果
(2)接收客户端对动态资源的请求,进行业务处理后,返回结果

三、NodeJS的基础

  1. 构建服务器 (http模块)
    const http = require("http")
    const server = http.createServer(function(req,res){
    console.log(req.url);

    res.writeHead(200,{"content-type":"text/html;charset=UTF-8"});
    res.write('中文');
    res.end("hello world");
    })
    server.listen(80)

  2. nodeJS的模块

    (1)暴露模块: exports.fun = fun;
    module.exports = {}
    (2) 加载模块: (能够加载进来的其实是exports对象)
    const a = require("*.js")

  3. fs模块 (文件系统)

    (1) fs.readFile("文件地址",function(err,data){
    console.log(data.toString());
    })

    (2) fs.writeFile("文件地址","内容",function(){
    })
    流的概念: stream

    (3) const readerStream = fs.createReadStream("文件地址")
    readerStream.on("data",function(chunk){
    })
    readerStream.on("end",function(){
    })
    readerStream.on('error', function(err){
    console.log(err.stack);
    });

    (4) 可读流和可写流通过管道操作连续执行

    var readStream = fs.createReadStream('./1.txt');
    var writeStream = fs.createWriteStream('output.txt');

    // 管道读写操作
    // 读取 input.txt 文件内容,并将内容写入到 output.txt 文件中
    readStream.pipe(writeStream);

  1. path模块(对路径进行操作)
    // __dirname 表示当前文件所在的目录
    console.log(__dirname)
    // __filename 表示 当前文件的完整路径
    console.log(__filename)

    path.join()
    path.normalize()
    path.resolve
    path.extname()

四、搭建静态资源服务器
var http = require("http");
var fs = require("fs");
var path = require("path");
var mime = require("mime"); // 自动获取文档类型,用在res.writeHead中

http.createServer(function (req, res) {
if (req.url == "/") {
fs.readFile(__dirname + "/app" + "/index.html", function (err, data) {
res.end(data);
})
}
var path_last = path.extname(req.url); // ".html" ".css"
if (path_last) {
res.writeHead(200, { "Content-type": mime.getType(path_last) });
//favicon.ico文件放在服务器根目录
var url = __dirname + (path_last == ".ico" ? "" : "/app") + req.url;
fs.readFile(url, function (err, data) {
res.end(data);
})
}
}).listen(3000)

五、NodeJS的事件循环

Event Loop(事件循环)是一个程序结构,用于等待和发送消息和事件

  1. Node.js是一个单进程单线程的应用。
  2. 单线程是指用户的代码始终运行在一个线程,即主线程
  3. Node.js还有另一个负责主线程与其他进程(主要是各种I/O操作)通信的线程,被称为"消息线程"(或事件队列)
  4. Event Loop: 当web server接收到请求,就把它关闭然后进行处理(执行I/O操作),然后去服务下一个web请求。
    每当遇到I/O的时候,主线程就让Event Loop线程去通知相应的I/O程序,然后接着往后运行,所以不存在等待时间。等到I/O程序完成操作,Event Loop线程再把结果返回主线程。主线程就调用事先设定的回调函数,完成整个任务,这个执行过程不断循环。
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,214评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,307评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,543评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,221评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,224评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,007评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,313评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,956评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,441评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,925评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,018评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,685评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,234评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,240评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,464评论 1 261
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,467评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,762评论 2 345

推荐阅读更多精彩内容

  • 个人入门学习用笔记、不过多作为参考依据。如有错误欢迎斧正 目录 简书好像不支持锚点、复制搜索(反正也是写给我自己看...
    kirito_song阅读 2,449评论 1 37
  • 1 服务器创建 创建服务器利用require引入http模块:var http=require("http")利用...
    果木山阅读 314评论 0 1
  • Node.js Node.js 就是运行在服务端的 JavaScript。 Node.js 是一个基于Chrome...
    Gukson666阅读 692评论 0 1
  • cmd命令: ./ 当前目录 ../ 上一级 dir 查看当前目录 ls 查看当前目录下文件 win...
    3hours阅读 542评论 0 1
  • 其实的能力是与生俱来的,他的模仿能力超乎我们的想象,这种超乎我们想象的能力在我们大人的控制和想当然的觉得他...
    穿prada的女王阅读 454评论 1 7