B

Build and Deploy a Rest API Using Serverless, Express, and Nodejs What is Aws Lambda? How to Monitor and Track your Lamda Invocations?

2025-06-07

使用无服务器、Express 和 Nodejs 构建和部署 Rest API

什么是 Aws Lambda?

如何监控和跟踪您的 Lamda 调用?

今天我将展示如何使用无服务器 lambda 构建和部署 express/Node Rest API。

我们知道无服务器正在快速发展,许多公司通过使用无服务器计算来节省成本。

亚马逊网络服务为我们提供了各种各样的服务来构建和部署从小规模到大规模的应用程序。

什么是 Aws Lambda?

AWS Lambda 无需预置或管理服务器即可运行您的代码,这意味着您无需购买或管理服务器。您只需在代码运行或用户访问您的网站时付费。

λ

要求是什么?

我正在使用无服务器框架 Cli 来创建和部署应用程序

打开你的终端

npm install -g serverless

sls login // SLS is a shortcut of serverless

Enter fullscreen mode Exit fullscreen mode

sls 登录后,您需要使用无服务器框架配置您的 Aws 凭证。

获取 AWS 凭证

一旦完成,您就可以开始了。

创建和部署 Rest API 端点

在工作目录中创建模板

serverless create --template aws-nodejs
Enter fullscreen mode Exit fullscreen mode

上述命令生成样板。

现在我们需要初始化Package.json文件并安装
一些依赖项。

npm init -y // generates package.json file

npm i -s body-parser cors express mongoose serverless-http
Enter fullscreen mode Exit fullscreen mode

在您最喜欢的代码编辑器中打开您的应用程序文件夹。

创建一个 app.js 文件并导入我正在使用的数据库 mongodb 的要求。

const serverless = require("serverless-http");
const express = require("express");
const bodyParser = require("body-parser");
const cors = require("cors");
const mongoose = require("mongoose");
const User = require("./models/data");
const app = express();
mongoose
.connect("mongodb://tests:tests@ds153958.mlab.com:53958/myapiproject")
.then(() => console.log("Connected to m labs"))
.catch(err => console.log(err));
app.use(cors());
// parse application/x-www-form-urlencoded
app.use(bodyParser.urlencoded({ extended: false }));
// parse application/json
app.use(bodyParser.json());
app.get("/user", function(req, res) {
User.find({})
.then(data => {
res.status(200).send(data);
})
.catch(err => res.send("Something Went Wrong"));
});
app.post("/user", function(req, res) {
const name = req.body.name;
const age = req.body.age;
const user = User({
name,
age
});
user
.save()
.then(data => res.status(200).send(data))
.catch(err => res.send("Error occured"));
});
app.put("/user/:id", function(req, res) {
const name = req.body.name;
const age = req.body.age;
User.findByIdAndUpdate(
{ _id: req.params.id },
{
$set: {
name,age
}
},
{ new: true }
)
.then(data => res.send(data))
.catch(err => res.send(err));
});
app.delete("/user/:id", function(req, res) {
User.findByIdAndRemove({ _id: req.params.id })
.then(data => res.send(data))
.catch(err => res.send("Error Occured "));
});
module.exports.handler = serverless(app);
view raw app.js hosted with ❤ by GitHub
const serverless = require("serverless-http");
const express = require("express");
const bodyParser = require("body-parser");
const cors = require("cors");
const mongoose = require("mongoose");
const User = require("./models/data");
const app = express();
mongoose
.connect("mongodb://tests:tests@ds153958.mlab.com:53958/myapiproject")
.then(() => console.log("Connected to m labs"))
.catch(err => console.log(err));
app.use(cors());
// parse application/x-www-form-urlencoded
app.use(bodyParser.urlencoded({ extended: false }));
// parse application/json
app.use(bodyParser.json());
app.get("/user", function(req, res) {
User.find({})
.then(data => {
res.status(200).send(data);
})
.catch(err => res.send("Something Went Wrong"));
});
app.post("/user", function(req, res) {
const name = req.body.name;
const age = req.body.age;
const user = User({
name,
age
});
user
.save()
.then(data => res.status(200).send(data))
.catch(err => res.send("Error occured"));
});
app.put("/user/:id", function(req, res) {
const name = req.body.name;
const age = req.body.age;
User.findByIdAndUpdate(
{ _id: req.params.id },
{
$set: {
name,age
}
},
{ new: true }
)
.then(data => res.send(data))
.catch(err => res.send(err));
});
app.delete("/user/:id", function(req, res) {
User.findByIdAndRemove({ _id: req.params.id })
.then(data => res.send(data))
.catch(err => res.send("Error Occured "));
});
module.exports.handler = serverless(app);
view raw app.js hosted with ❤ by GitHub

我们需要为 MongoDB 数据库创建一个模型。

创建一个 data.js 文件。

const mongoose = require('mongoose');

const Users = mongoose.Schema({
    name: String,
    age: Number,
})

const User = mongoose.model('User', Users);

module.exports = User;
Enter fullscreen mode Exit fullscreen mode

这是我们简单的用户模型。

打开您的 serveless.yml 并添加以下代码。

  • 运行时 nodejs8.10 为什么因为 Aws lambda 目前支持 v8.10。
  • handler:我们需要定义 app.handler,这意味着请查看 app.js 文件。
  • serverless-offline 插件帮助我们将您的应用程序运行到本地环境中。

打开终端并运行。

sls offline start // to run the code in local environment
Enter fullscreen mode Exit fullscreen mode

离线

哇,我们的代码运行时没有任何错误。

如何将代码部署到 Aws Lambda?

  • 无服务器框架在后台完成所有工作,非常简单

打开你的终端并运行。

sls deploy 
Enter fullscreen mode Exit fullscreen mode

运行上述命令一段时间后,您的 API 端点就会显示在终端中。

部署

如何测试 API 端点?

  • 我正在使用 Postman 来测试 API 端点。

Post 方法

后方法

获取方法

得到

如何部署现有的 REST API?

  1. 打开您的 app.js 文件或 main.js 文件并添加这些导出。
const serverless = require('serverless-http');
const express = require('express');
const app = express();

*express code*

module.exports.handler = serverless(app);
Enter fullscreen mode Exit fullscreen mode

2.设置你的 serverless.yml

如何监控和跟踪您的 Lamda 调用?

为了监控、调试和检测 lambda 的错误,我们使用Dashbird

为什么选择 Dashbird?

  • Dashbird 帮助我们主动监控健康和错误。

  • Dashbird 的一个主要特点是其用户友好的界面。

  • Dashbird 可视化您的所有 AWS Lambda 指标,如
    内存利用率、调用次数和执行持续时间。

DashBird 界面

Dashbird 监控

希望你们玩得开心,如有任何疑问,请随时询问。

关于无服务器的其他有趣文章

如何构建您的第一个无服务器网站

文章来源:https://dev.to/sait/build-and-deploy-a-rest-api--using-serverless-express-and-nodejs-3331
PREV
大 O 符号简介👀
NEXT
Easy micro-interactions in CSS (Pt2): Multi-state button