布莱恩F爱
向一位来自Portlandyobet英雄联盟的谷歌开发专家学习Angular、Web技术和Node.js。
广告 ·ultimatecourses.com
用终极课程学习Angular的正确方法

和Expressjs的一天

到目前为止,我已经花了一天的时间学习expressjs——一个用于web应用服务器的node.js框架。几个小时后,我想我可能已经上瘾了,但我还有很多东西要学。我想记录下我在这个过程中学到的一些教训。我将在本文中讨论以下主题。

  • 开始使用express
  • 启动服务器
  • 使用主体解析器中间件
  • 启用跨原始资源共享(CORS)
  • 调试与console.log
  • 设置状态码和响应

开始使用Express

开始使用express非常容易。expressjs的先决条件是你有下载并安装node.js。其次,您应该非常适应在终端/命令行环境中操作。

现在我们已经准备好了,我们需要创建package.json指定项目设置和依赖关系的文件。首先,我们唯一依赖的是express本身。这是包装。json文件看起来像这样。

{“名称”:“simple-json-example”,“描述”:“简单的JSON示例”,“版本”:“1.0.0”,“私人”:真正的,“依赖”:{“表达”:“4.倍”}}

我用的是表述4。x版本,但是你也可以用最新的版本替换“4”。x”与“最新”。我的项目是一个简单的JSON解析示例。基于所发布的消息,我们的简单服务器将响应一条简单的文本消息。真的很容易。

接下来我们需要做的是使用节点包管理器(npm)安装express。为此,打开终端/命令行并浏览到您创建的项目文件夹package.json文件。然后运行以下命令(不包括美元符号)。

美元npm安装

这将创建一个名为node_modules它将包含快递代码。现在我们可以开始编写express应用程序了。应用程序的代码将放在一个名为server.js。先使用要求()函数来加载express模块。然后使用express构造函数启动一个新的应用程序。

var表达=需要(“表达”);var应用程序=表达();

到目前为止很简单。现在,让我们为客户机将发送到服务器的POST创建一个新句柄。客户机代码将发送一个POST到http://localhost:8080/sample-json我们想为。指定一个post处理程序/ sample-json路径。

应用程序帖子(' / sample-json ',函数(要求的事情,res){/ /做一些工作});

该方法的第二个参数是我们的匿名函数,它将被express调用。该函数将接收两个对象:首先是请求对象其次的响应对象。现在我们什么也没做。我们很快就会讲到。

最后,我们需要告诉应用程序监听特定端口。我使用端口8080以避免与可能在端口80上运行的现有web服务器发生冲突。我还将一条消息登录到我的控制台,让我知道服务器已经成功启动。

应用程序(8080,函数(){控制台日志(“服务器已启动并监听端口8080”);});

总之我们的server.js文件是这样的。

/ /需要expressjsvar表达=需要(“表达”);/ /启动应用程序var应用程序=表达();应用程序帖子(' / sample-json ',函数(要求的事情,res){/ /做一些工作});//监听端口8080应用程序(8080,函数(){控制台日志(“服务器已启动并监听端口8080”);});

启动服务器

现在我们已经编写好了应用程序(非常简单),我们想让它运行起来。它真的很容易。只需运行以下命令。

美元npm开始

您应该会看到控制台消息,指示它已成功启动。

美元npm开始>receive-json@1.0.0启动/用户/布莱恩/博客/表达>node Server .js服务器启动并监听端口8080

使用主体解析器中间件

截至第4号快车。体解析中间件被分离到您需要安装的自己的包中。表达3。这是装在快递包裹里的。让我们把这个新的依赖项添加到package.json文件。只需添加一个新行,指定要安装的新包。

{“名称”:“接收json”,“描述”:“接收JSON”,“版本”:“1.0.0”,“私人”:真正的,“依赖”:{“表达”:“4.倍”,“体”:“最新”}}

然后,再次运行npm install命令来安装这个新的依赖项。

美元npm安装

接下来,需要在服务器中使用这个新模块,并配置express应用程序以使用分析体中间件。

varbodyParser=需要(“体”);

body-parser中间件可以轻松地解码表单POST。注意,必须将内容类型指定为应用程序/ x-www-form-urlencoded。只需将以下代码添加到您的server.js文件。

应用程序使用(bodyParserurlencoded({扩展:}));

分析体中间件还可以解析JSON文本。注意,必须将内容类型指定为application/json。要解析请求主体中的JSON文本,只需将以下代码添加到您的server.js文件。

应用程序使用(bodyParserjson());

又很简单的!对象中存储解析后的数据身体请求对象的属性。总结一下,下面是用于登出发送到服务器的表单数据的完整代码。

//需要expressjs和中间件var表达=需要(“表达”);varbodyParser=需要(“体”);/ /启动应用程序var应用程序=表达();/ /解析应用程序/ x-www-form-urlencoded应用程序使用(bodyParserurlencoded({扩展:}));应用程序帖子(' / sample-post ',函数(要求的事情,res){//退出表单数据控制台日志('发布数据:%j',要求的事情身体);});//监听端口8080应用程序(8080,函数(){控制台日志(“服务器已启动并监听端口8080”);});

使歌珥

接下来,我想包括歌珥模块用于启用跨源资源共享。你可以阅读更多关于CORS和他们对expressjs的建议实现。这使我的服务器能够响应来自任何域的请求。我的客户端请求来自一个单独的域,而我的express应用程序正在侦听本地主机域。

首先,我们需要安装cors模块。让我们将其作为项目的依赖项添加到package.json文件。

{“名称”:“接收json”,“描述”:“接收JSON”,“版本”:“1.0.0”,“私人”:真正的,“依赖”:{“表达”:“4.倍”,“歌珥”:“最新”,“体”:“最新”}}

当然,我们需要再次运行npm install命令来安装新模块。

美元npm安装

然后我们需要cors模块并允许所有cors请求。你可以阅读更多关于CORS模块和各种配置选项GitHub项目页面

var歌珥=需要(“歌珥”);应用程序使用(歌珥());

就是这样。:)

调试与console.log

正如您在我提供的示例中看到的那样,我使用console.log()方法来显示标准输出的调试消息。当您与应用程序交互时,它们将显示在终端窗口中。在调试和故障排除应用程序时,这些工具的帮助之大是再怎么强调也不为过的。我也用printf消息的样式格式。这里是一个快速的使用printf的小抄格式。

设置状态代码和响应主体

最后,我们可以开始执行一些应用程序逻辑了!对于我的样例请求,我期待一个名为的表单变量json它包含一个JSON字符串。对象中解析并存储表单postreq.body由主体解析器中间件生成的参数。我想首先验证请求,然后解析JSON,然后根据发送的消息返回一些文本给客户机。这是我完整的server.js文件。

//需要expressjs和中间件var表达=需要(“表达”);varbodyParser=需要(“体”);/ /启动应用程序var应用程序=表达();/ /解析应用程序/ x-www-form-urlencoded应用程序使用(bodyParserurlencoded({扩展:}));应用程序帖子(' / sample-post ',函数(要求的事情,res){/ /验证后如果(!!!要求的事情身体json){控制台警告(“没有提供json POST变量。”);res状态(500);返回;}//身体解析器中间件将解码表单postvarjsonString=要求的事情身体json;控制台日志('json字符串:%s',jsonString);//解析JSON字符串varjson=JSON解析(jsonString);控制台日志('解析json: %j',json);/ /判断反应varrespondWith=!!json味精& &json味精= =“你好”吗?“Hello World !”:“再见!”;/ /发送响应res状态(200);res发送(respondWith);});//监听端口8080应用程序(8080,函数(){控制台日志(“服务器已启动并监听端口8080”);});

让我运行一下上面应用程序代码的每个片段。

  • 第15-19行:我通过检查是否存在req.body.json变量。json要发布到服务器的表单字段的名称。如果json字段没有提供,那么我将向控制台注销一个警告,并向客户端返回一个500状态码。
  • 第22-23行:我只是获得json字段的值并将其登录到控制台。
  • 第26-27行:我使用JSON类来解析json字符串并注销json对象。
  • 第30行:我检查JSON对象是否有一个名为的属性味精,并检查其值。如果的值味精如果是“你好”,我会回复“Hello World!”,否则我会回复“Goodbye!”
  • 我将状态码设置为200(成功),并设置将发送到客户端的响应文本。

我希望这个使用expressjs的非常简单的例子能够展示使用node.js的expressjs的简单性和强大的功能。

布莱恩F爱

嗨,我是布莱恩。我对TypeScript, Angular和Node.js感兴趣。我和我最好的朋友邦妮结婚了,我住在波特兰,我经常滑雪。