在这篇博客文章中,我们将更深入地研究如何脚打新的云应用程序,并利用
的主题,队列和存储桶等资源基本工具和服务
要遵循并成功完成本指南,您需要安装和设置以下工具和服务:
- node.js :这是允许您在本地计算机上运行JavaScript的运行时环境。您可以从官方Node.js website下载并安装它。
- 一硝基CLI :这是用于与一氮平台进行交互的命令行接口。您可以在我们的Getting Started guide中找到一硝基CLI的安装指南。
- (可选)您选择的云提供商平台上的帐户,例如Amazon Web Services (AWS),Google Cloud Platform (GCP)或Microsoft Azure。
设置您的项目
我们的第一步将是初始化一个新的一硝化项目,然后将Express.js添加到它。打开终端并执行以下命令:
nitric new
? What is the name of the project? express-example
? Choose a template: official/JavaScript - Starter
# Navigate into your newly created project directory and install dependencies
cd express-example
yarn install
# Add express to your project
yarn add express
现在,在您首选的代码编辑器中打开项目。您的项目结构应类似于以下内容:
├── functions
│ ├── hello.js
├── node_modules
│ ├── ...
├── .gitignore
├── index.js
├── nitric.yaml
├── package.json
├── README.md
└── yarn.lock
您可能会注意到项目结构中的functions
文件夹。默认情况下,Nitric预计您的应用程序将居住在此处的入口点代码。但是,该惯例是灵活的。您可以根据应用程序的要求对其进行修改。
对于本指南,让我们用一个名为app.js
的单个入口点文件替换functions
文件夹。执行以下命令以实现这一目标:
rm ./functions/hello.js
touch ./functions/app.js
接下来,我们将添加一些明确的代码来启动我们的应用程序:
import express from 'express'
import { http } from '@nitric/sdk'
const app = express()
app.get('/', (req, res) => {
res.send('Hello World!')
})
http(app)
在上面的代码段中,如果您熟悉Express.js,您会注意到我们没有使用app.listen
。相反,我们采用了Nitric http
函数。此功能处理将应用程序绑定到每个环境的适当端口的责任,从而消除了对app.listen
的需求。
使用此设置,您的Express.js应用程序可以进行本地测试。默认情况下,该项目带有一个dev
脚本,您可以运行该脚本以启动本地开发服务器:
yarn dev
如果您的设置正确,则输出的一部分应该类似:
SUCCESS Started Local Services! (1s)
Local running, use ctrl-C to stop
Proxy | Endpoint
8000 | http://localhost:4001
Dev Dashboard | http://localhost:49152
现在,您的Express应用程序正在本地运行,一氮用作代理。该应用程序可在port 4001
上找到,您可以使用另一个终端或Web浏览器对其进行测试。在另一个终端中运行以下命令:
curl localhost:4001
Hello World!
使用一氮用云资源来增强您的express.js应用程序
使用Basic Express.js应用程序启动和运行,让我们探索如何用一氮扩展其功能。例如,我们将添加一个pub/sub主题,该主题将使我们能够在后台执行任务,同时仍保持快速的HTTP API响应时间。
使用以下代码更新您的app.js
文件:
import express from 'express'
import { http, topic } from '@nitric/sdk'
const app = express()
const workRequests = topic('work-requests').for('publishing')
app.get('/', async (req, res) => {
await workRequests.publish()
res.send('Hello World!')
})
http(app)
在上面的更新代码中,我们介绍了我们的应用程序发布的workRequests
主题。我们还创建了一个新功能来处理背景工作:
touch functions/worker.js
worker.js
文件将包含以下代码:
import { topic } from '@nitric/sdk'
const sleep = (ms) => new Promise((res) => setTimeout(res, ms))
topic('work-requests').subscribe(async (ctx) => {
console.log('Starting new request')
// Wait for 2 seconds to simulate a long-running task
await sleep(2000)
console.log('Request processed')
})
当您在浏览器中导航到localhost:4001
时,您应该注意到控制台输出两行,它们之间的延迟两秒钟,这表明了模拟的工作请求:
Starting new request
Request processed
您应该注意,即使背景工作者需要两秒钟才能完成,HTTP请求GET: /
仍然立即返回。
部署到云
硝酸盐简化了将应用程序部署到云的过程。它否定了对手动云部署过程的需求或使用Terraform之类的外部解决方案。
为了促进部署,我们将创建一个stack
。一个堆栈提供一氮,其中包括项目的特定云实例所需的配置,例如提供商和区域。
让我们为AWS创建一个新的堆栈:
nitric stack new
? What do you want to call your new stack? dev
? Which Cloud do you wish to deploy to? aws
? select the region us-east-1
nitric stack new
命令将创建一个名为nitric-dev.yaml
的文件,包含:
name: dev
provider: nitric/aws@0.30.0
region: us-east-1
现在,您可以使用以下命令将应用程序部署到云:
nitric up
成功部署后,您可以使用up
命令输出中提供的API网关URL访问云中的express.js + nitric应用程序。
完成云部署后,可以使用nitric down
命令退役。
进一步探索
现在,您了解了基础知识,请考虑探索其他可用的一量子资源来增强您的应用程序。这些资源包括:
只能使用几行代码添加到您的应用程序中。
快乐编码!