node.js

2019-04-01  本文已影响0人  皇甫圣坤

一、什么是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线程再把结果返回主线程。主线程就调用事先设定的回调函数,完成整个任务,这个执行过程不断循环。
上一篇 下一篇

猜你喜欢

热点阅读