2024年前端最新Nodejs学习item 1 -- 入门手上_ item<1->(1),数据库开发面试自我介绍范文

打开全栈工匠技能包-1小时轻松掌握SSR

两小时精通jq+bs插件开发

生产环境下如歌部署Node.js

开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

网易内部VUE自定义插件库NPM集成

谁说前端不用懂安全,XSS跨站脚本的危害

webpack的loader到底是什么样的?两小时带你写一个自己loader

var http = require("http");

require方法用来引入一个模块,参数是模块的名字。比如File System模块,可以这么引入:

var fs = require("fs");

我们可以把require()方法当做全局方法使用,但实际上它更像属于某个模块的本地方法,它的文档参考这里:https://nodejs.org/api/globals.html

require方法返回某个模块的实例,比如require(“http”)就返回一个HTTP实例。HTTP实例的参考文档在这里:https://nodejs.org/api/http.html

我们看到,HTTP模块有一个方法createServer(),就牵涉到我们的第二行代码了。

创建服务器

HTTP模块的createServer()方法,接受一个方法作为参数,原型为:

http.createServer([requestListener])

requestListener是一个方法,会与http.Server类的request事件关联起来。这样当客户端请求到达时,requestListener就会被调用。

requestListener有两个参数,函数原型如下:

function (request, response) { }

第一个参数request的类型是http.IncomingMessage,实现了Readable Stream接口。
第二个参数的类型是http.ServerResponse,实现了Writeable Stream接口。

Stream的API在这里:https://nodejs.org/api/stream.html。同时,request和response还是EventEmitter,可以发射特定的事件。

EventEmitter的API在这里:https://nodejs.org/api/events.html#events_class_events_eventemitter,后面我们会讲如何使用EventEmitter来发射事件、处理事件。

再回顾一下我们创建server的代码:

http.createServer(
    function(request, response) { 
        response.writeHead(200, {"Content-Type": "text/plain"}); 
        response.write("Hello World!"); 
        response.end(); 
    }
).listen(8000); 

http.createServer返回一个http.Server实例,http.Server的listen方法可以让服务器监听在某个端口上,示例中是8000。

如你所见,我们提供了一个匿名函数给createServer方法。在这个方法中,我们通过response参数向客户端回写了“Hello World!”消息。

分析客户端请求

前面我们分析了http.createServer方法,它的参数是一个带两个参数的方法,一个代表了客户端发过来的请求,一个代表了要回写给客户端的响应。我们来看看request参数。

request是http.IncomingMessage的实例,通过这个实例,我们可以拿到请求参数,比如HTTP方法、HTTP版本、url、头部等,具体的API在这里:https://nodejs.org/api/http.html#http_http_incomingmessage

我们通过修改HelloWorld.js来看看(另存为HelloWorld2.js)。代码如下:

// 引入http模块
var http = require("http"); 

// 创建server,指定处理客户端请求的函数
http.createServer(
    function(request, response) { 
        console.log("method - " + request.method);
        console.log("version - " + request.httpVersion);
        console.log("url - " + request.url);
        response.writeHead(200, {"Content-Type": "text/plain"}); 
        response.write("Hello World!"); 
        response.end(); 
    }
).listen(8000); 

console.log("Hello World start listen on port 8000");

如你所见,我使用console这个对象来输出了一些调试信息,打印了HTTP方法、版本、url等信息。可以执行node HelloWorld2.js,浏览器访问http://localhost:8000,然后跑到命令行看看输出了什么信息,我这里是这样的:

这里写图片描述

我们简简单单的HelloWorld已经可以发送一些响应数据给客户端,你在浏览器里能看到“Hello World!”字样。这个响应是通过http.ServerResponse的实例response发送给客户端的。

http.ServerResponse也是一个Stream,还是一个EventEmitter。我们通过它给客户度返回HTTP状态码、数据、HTTP头部等信息。

HTTP模块
在Node.js的HTTP模块,状态行就是通过http.ServerResponse的writeHead方法写给客户端的。writeHead方法原型如下:

response.writeHead(statusCode[, statusMessage][, headers])

这个方法的第一个参数,就是statusCode,也就是200、403之类的数字,剩下的参数是可选的。最后一个参数是headers,你可以在这里使用JSON对象表示法来写一些HTTP头部,比如:{“Content-Type”:”text/plain”,”Content-Length”:11}。第一个可选参数statusMessage用来指定一个状态描述消息,可以不填写。

HTTP头部

头部就是一些key-value对,比如我们在HelloWorld里看到的”Content-Type”,就是用来说明数据类型的头部标签,对应的可能是文本文件、图片、视频、二进制等。类似的还有”Content-Length”,用来指定数据长度。还有很多很多,比如”Date”、”Connection”等。具体还是参考前面的链接吧。

头部还可以使用http.ServerResponse的response.setHeader(name, value)方法来单独设置,一次可以设置一个HTTP头部。

数据

头部之后就是数据了,有些状态码,比如200,后续都会有一些数据。而有些,比如301、404、403、500之类的,多数没有数据。

数据通过http.ServerResponse的write方法来写回给客户端,比如这样:

response.setHeader("Content-Type", "text/html");

这里要提一点,HTTP常见的数据传输编码方式有两种:

  • 设置Content-Length,传输固定长度的数据
  • 设置Transfer-Encoding头部为chunked,分块传输数据

像我们现在的HelloWorld示例,没有设置Content-Length头部,Node.js的HTTP模块就默认为chunked编码。

我们使用Chrome浏览器的开发者工具来查看网络数据,可以很明确的看到。如下图所示:

这里写图片描述

HTTP响应

最后

全网独播-价值千万金融项目前端架构实战

从两道网易面试题-分析JavaScript底层机制

RESTful架构在Nodejs下的最佳实践

开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

一线互联网企业如何初始化项目-做一个自己的vue-cli

思维无价,看我用Nodejs实现MVC

代码优雅的秘诀-用观察者模式深度解耦模块

前端高级实战,如何封装属于自己的JS库

VUE组件库级组件封装-高复用弹窗组件

  • 25
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要使用 Node.js 和数据库来渲染 art-template 模板,可以按照以下步骤操作: 1. 安装 Node.js 和相应的数据库驱动程序,比如 MySQL、MongoDB 或 PostgreSQL。 2. 在 Node.js 项目中安装 art-template 和数据库驱动程序的 Node.js 模块,可以使用 npm 命令安装,如下所示: ``` npm install art-template mysql --save ``` 3. 创建数据库连接,使用 Node.js 的数据库驱动程序连接数据库,如下所示: ```javascript const mysql = require('mysql'); const connection = mysql.createConnection({ host: 'localhost', user: 'root', password: 'password', database: 'my_database' }); connection.connect(); ``` 4. 查询数据库,获取数据并将其传递给 art-template 进行渲染,如下所示: ```javascript const template = require('art-template'); connection.query('SELECT * FROM my_table', function (error, results, fields) { if (error) throw error; const html = template(__dirname + '/views/my_template.art', { data: results }); console.log(html); }); ``` 在此示例中,我们使用 `connection.query()` 方法查询数据库并获取结果。然后,我们将结果传递给 art-template 的 `template()` 方法进行渲染,同时也将模板文件的路径作为第一个参数传递给 `template()` 方法。 在渲染时,我们可以在模板中使用 `data` 变量来访问查询结果中的数据。 5. 关闭数据库连接,如下所示: ```javascript connection.end(); ``` 在 Node.js 中,数据库连接是异步的,因此在完成所有数据库操作后,应该关闭连接,以避免内存泄漏和其他问题。 这样就可以在 Node.js 中使用 art-template 和数据库渲染模板了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值