Nodejs入门-基于Node.js的精简利用

 Web前端     |      2019-11-29

服务端JavaScript

  大名鼎鼎的,JavaScript是运行在浏览器的脚本语言,JavaScript日常作为顾客端程序设计语言应用,以JavaScript写出的程序常在客户的浏览器上运转。直至Nodejs的现身,Node.js当先50%宗旨模块都用JavaScript语言编写,Node.js的产出使JavaScript也能用来服务器端编制程序。Node.js含有风姿洒脱多元内置模块,使得程序能够脱离Apache HTTP Server或IIS,作为单身服务器运转。

前日拜读了ManuelKiessling大神的《Node入门》的博客,认为获得广大,那篇文章极其符合有JavaScript底蕴和调控了一门后台语言(Java,Python等卡塔尔(英语:State of Qatar)的想入门node的学人。

Node.js概况

  Node.js允许通过JavaScript和生机勃勃多级模块来编排服务器端应用和网络有关的使用。

  宗旨模块包蕴文件系统I/O、网络(HTTP、TCP、UDP、DNS、TLS/SSL等)、二进制数据流、加密算法、数据流等等。

  运用Node.js的连带框架能够飞速的做到应用的费用,常用的框架有Express.js、Koa.js、Socket.IO和Connect等。

  Node.js主要用以编写像Web服务器相符的网络使用,那和PHP和Python是相近的。然而Node.js与别的语言最大的不一致之处在于,PHP等语言是梗塞的(唯有前一条命令奉行达成才会执行前面包车型大巴下令),而Node.js是非窒碍的(多条命令能够同期被周转,通过回调函数获知命令已了结运营)。

  Node.js是事件驱动的。开垦者能够在不使用线程的情景下支付出二个能力所能达到承继高并发的服务器。

  Node.js使用Google V8JavaScript 引擎卡塔尔(قطر‎,因为V8是基于BSD许可证的开源软件且速度相当的慢况且注意于网络成效,在HTTP、DNS、TCP等方面更加的成熟。

太阳娱乐app,  Node.js的包微型机npm可形成相关信赖包的模块下载。

Nodejs入门-基于Node.js的精简利用。作品诲人不倦,一步一步晋级文化,老外的稿子很有沉凝,写的真的比我国的XX好的多。

Node.js轻巧应用

  应用注解:通过运营本地服务器,完结图片上传并体现的法力。

这里小编就开生龙活虎篇博客记录一下。

  后生可畏、须要的模块

  HTTP服务器模块(HTTP服务器):

  fs模块(文件系统):

  url模块(网址):

  formidable模块(管理公事上传,ps:该模块须要npm install安装):

 

  二、思路深入分析

  1.开发银行服务器,发送HTTP诉求

  2.因此得到央浼参数,施行路由跳转或管理程序

什么是Node.js

1.中文网官方概念:Node.js 是三个依照 Chrome V8 引擎的 JavaScript 运行条件,使用了一个事件驱动、非堵塞式 I/O 的模型,使其轻量又便捷,包微型机 npm,是大地最大的开源库生态系统。
当今设置一些东西确实一贯npm很方便。

2.JS早先平昔只在浏览器前端上做一些交互作用性的操作,今后有了Node之后,它同意在后端(脱离浏览器情形)运维JavaScript代码。

要兑今后后台运维JavaScript代码,代码供给先被解说然后准确的试行。Node.js的法规正是如此,它接纳了谷歌(Google卡塔尔国的V8虚构机(谷歌的Chrome浏览器选用的JavaScript执市价况),来声明和实践JavaScript代码。

3.除了那几个之外,伴随着Node.js的还大概有为数不少实用的模块,它们可以简化相当多再度的专门的学问,例如向终点输出字符串。

之所以,Node.js事实上既是二个运营时景况,同不经常候又是一个库。

  三、模块抽出及代码展现

  1.收取出主页面index.js(解耦)

/**
 * Created by aaron.
 */
var server=require('./server');
var router=require('./router');
var requestHandlers=require('./requestHandlers')

var handle={}
    handle['/']=requestHandlers.start,
    handle['/start']=requestHandlers.start,
    handle['/upload']=requestHandlers.upload,
    handle['/show']=requestHandlers.show;

server.start(router.route,handle);

  2.开立服务器并监听客户端央求事件server.js

/**
 * Created by aaron.
 */
var http=require('http');
var url=require('url');

function start(route,handle) {
    function onRequest(request,response) {
        var postData='';
        var pathname=url.parse(request.url).pathname;
        console.log('Request for'+pathname+'received');

        //node-formidable会对postData及setEncoding处理
        /*request.setEncoding('utf8');
        request.addListener('data',function (postDataChunk) {
            postData+=postDataChunk;
            console.log('Received POST data chunk'+postDataChunk+'.');
        });
        request.addListener('end',function () {
            route(handle,pathname,response,postData);
        })*/
        route(handle,pathname,response,request);

    }
    http.createServer(onRequest).listen(8888);
    console.log('Server has started.');
}

exports.start=start;

  3.获取央浼参数并试行路由跳转router.js

/**
 * Created by aaron.
 */
function route(handle,pathname,response,request) {
    console.log('About to route a request for'+pathname);
    if(typeof handle[pathname]==='function'){
        handle[pathname](response,request);
    }else{
        console.log('No request handler found for'+pathname);
        response.writeHead(404,{'Content-type':'text/plain'});
        response.write('404 Not found');
        response.end();
    }
}

exports.route=route;

  4.倡议管理程序并作出响应requestHandler.js

/**
 * Created by aaron.
 */
//执行非阻塞操作,从node来执行一个shell命令
var exec=require('child_process').exec;
var querystring=require('querystring');
var fs=require('fs');
var formidable=require('formidable');

function start(response) {
    console.log('Request handler "start" was called.');

    var body='<html>' +
        '<head>' +
        '<meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/>' +
        '</head>' +
        '<body>' +
        '<form action="/upload" method="post" enctype="multipart/form-data">' +
        '<input type="file" name="upload"/>' +
        '<br/>'+
        '<input type="submit" value="Upload file"/>'+
        '</form>' +
        '</body>'+
        '</html>';

    response.writeHead(200,{'Content-type':'text/html'});
    response.write(body);
    response.end();
}

function upload(response,request) {
    console.log('Request handler "upload " was called.');

    var form=new formidable.IncomingForm();
    form.parse(request,function (error,fields,files) {
        console.log('parsing done:<br/>'+files.upload.path);
        fs.renameSync(files.upload.path,'C:/temp/test.jpg');
        response.writeHead(200,{'Content-type':'text/html'});
        response.write('received image:<br/>');
        response.write('<img src="/show"/>');
        response.end();
    })
    /*response.writeHead(200,{'Content-type':'text/plain'});
    response.write('You`ve sent the text:'+
        querystring.parse(postData).text
    );
    response.end();*/
}

function show(response,postData) {
    console.log('Request handler "show" was called.');
    fs.readFile('C:/temp/test.jpg','binary',function (error,file) {
        if(error){
            response.writeHead(500,{'Content-type':'text/plain'});
            response.write(error+'n');
            response.end();
        }else{
            response.writeHead(200,{'Content-type':'image/jpg'});
            response.write(file,'binary');
            response.end();
        }
    })
}

exports.start=start;
exports.upload=upload;
exports.show=show;

三个完完全全的依赖Node.js的web应用

上边大家就接着做叁个这么的运用,便于掌握Node的编写制定。

大家来把目的设定得轻松题,可是也要够实际才行:

  • 用户能够经过浏览器采取大家的运用。
  • 当客户央求时,能够看看一个应接页面,页面上有叁个文本上传的表单。
  • 顾客能够筛选三个图形并提交表单,随后文件将被上流传,该页面实现上传后会把图片展现在页面上。

这里先不慌具体贯彻鲜明的功效,先达成响应事件。

大家来分解一下以此动用,为了完成上文的用例,大家须要实现如何部分吗?

  • 我们必要提供Web页面,由此需求三个HTTP服务器
  • 对此不一致的央求,依照诉求的U奥迪Q3L,大家的服务器须要付与区别的响应,因而大家需求一个路由,用于把央求对应到哀告管理程序(request handler)
  • 当倡议棉被和衣服务器收到并透过路由传递之后,要求能够对其打开管理,因而我们需求末了的号令处理程序
  • 路由还应当能管理POST数据,何况把数据封装成更友好的格式传递给央浼管理入程序,由此须要恳请数据管理效果
  • 大家不但要拍卖U科雷傲L对应的央求,还要把内容展现出来,那象征大家须求有的视图逻辑供央求管理程序使用,以便将内容发送给客户的浏览器
  • 终极,客户须要上传图片,所以大家必要上传管理效果来拍卖那上头的内部原因

  5.结出呈现

  选用图片--> 上传 --> 体现图片

太阳娱乐app 1太阳娱乐app 2

 

接收Node.js时,大家不光在完结一个行使,同不常候还完成了总体HTTP服务器。事实上,我们的Web应用以致相应的Web服务器基本上是同意气风发的。

上一篇:没有了 下一篇:HTTP错误代码大全