码迷,mamicode.com
首页 > 其他好文 > 详细

用Now轻松部署无服务器Node应用程序

时间:2020-12-23 12:37:16      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:iam   depend   node   erb   info   ext   lam   版本   lambda   

用Now轻松部署无服务器Node应用程序

技术图片
作者 | William Imo
译者 | 方彦
编辑 | Yonie
本文作者将用 Now(https://zeit.co/now) 来部署一个简单的 node 应用程序演示,帮助大家学习怎样使用 Now 的 CLI 工具来轻松部署一个 Node 应用程序。
Node.js 是一个 JavaScript 的运行环境,运行于浏览器之外。应用程序和 API 可以用 Node.js 来构建。应用程序间使用 API 来共享数据。然而,这些应用程序和 API,需要托管在网络上,这样网络上的其它应用程序才能访问到它。
在本文中,我们会用 Now 的 CLI 服务来部署一个简单的 Node 应用程序。

部署 Node 应用程序的步骤

按下列步骤部署一个 Node 应用程序:

  • 在 node 工程中创建 now.json 文件。
  • 给 node app 指定 build 文件和所需的 builder(对于 node app,是 @now/node-server)。
  • 在 now.json 里给每个 API 端点创建路由。
  • 确保服务器入口文件名字为 index.js ,或者在 now.json 中制定 home route。
  • 使用命令 now 进行发布。
    ZEIT 的 Now 是一个云部署的无服务器解决方案,提供静态和动态应用程序的无缝部署。

    安装

    因这是一个 Nodejs 项目,要确保已经有 node 和相应的包管理器 npm,安装方式如下:

    node -v && npm -v

    如果已经安装,就会打印当前的版本号。如果还没有安装,会进入 nodejs page 进行下载并安装: https://nodejs.org/en/
    接下来,从 npm 安装 Now CLI:

    npm install -g now

    使用下面的命令创建新的 now-express 工程:

    mkdir now-express

    在工程目录下,使用下面命令创建空的 node 工程:

    npm init -y

    这样就创建了一个 node 工程,它有缺省的配置和相应的 package.json 文件。
    在项目中安装 express:

    npm install --save express

    Express 是一个可以有效构建 web 服务器的 Node.js 框架。链接地址: https://expressjs.com/

    创建一个 Web 服务器

    在根目录 index.js 下创建一个新文件夹,可以取任意名字,用来作为应用程序的入口。在 index.js 中,导入 express,使用 express 内嵌的 body parser,在端口 5000 创建一个 listener,如下所示:

    
    const express = require("express");const app = express();
    const port = 5000;

// Body parser

app.use(express.urlencoded({ extended: false }));

// Listen on port 5000

app.listen(port, () => {
console.log(Server is booming on port 5000<br/>Visit http://localhost:5000);
});

在 index.js 中,创建 home 路由和两个简单的模拟 API 端点:

// Import Dependencies

//Specify port

// Body parser

// Home route
app.get("/", (req, res) => {
res.send("Welcome to a basic express App");
});

// Mock APIs
app.get("/users", (req, res) => {
res.json([
{ name: "William", location: "Abu Dhabi" },
{ name: "Chris", location: "Vegas" }
]);
});

app.post("/user", (req, res) => {
const { name, location } = req.body;

res.send({ status: "User created", name, location });
});

现在,我们创建了两个 API 端点,用来获取用户并发送用户通知。传送一个用户到服务器的端点,它会在 response 中返回该用户。
package.json 文件中,包括启动服务器的脚本,可更新如下:

{
"name": "now-express",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"start": "node index.js",
},
"keywords": [],
"author": "William Imoh",
"license": "MIT",
"dependencies": {
"express": "^4.17.1",
"nodemon": "^1.19.1"
}
}

运行下列命令,启动服务器:

npm run start

从浏览器上进入:http://localhost:5000,查看这个简单的页面:
![](https://s4.51cto.com/images/blog/202012/18/1016a9f4f3eca934036ff934b2f6bdd6.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
你可以在浏览器里检查 /users 路由,使用 Postman 数据,对 /user 做 API 调用。
### 使用 Now 部署应用程序
现在,需要配置文件 now.json,用来构建一个 node 应用程序,并创建一个 lambda 表达式。没有该配置文件,文件都是静态的。在应用程序的根目录下创建文件 now.json。
在该配置文件中,构建 app 所需的主要参数由更重要的 build 和 builder 来指定。按下列步骤在 now.json 中创建 index.js 文件的 build。

{
"version": 2,
"builds": [{ "src": "index.js", "use": "@now/node-server" }],
}

现在,我们首先要指定 Now 平台的版本(版本 2),然后指定该 node 应用程序的源文件。在 Node 应用程序中,推荐使用 @now/node-server builder。
使用 @now/node 编译器,会在部署后访问该应用程序时抛出一个错误。 在单独的无服务器 node 应用中,推荐使用 @now/node。
 ![](https://s4.51cto.com/images/blog/202012/18/c09a13b23ded1d08457da9c0cbf7301b.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
访问 builds 和 builders,可以了解更多详情,详细链接地址:
builds: https://zeit.co/docs/v2/deployments/builds/
builders: https://zeit.co/docs/v2/deployments/builders/overview/
按这种设置,我们可以发布应用程序,并获得有效的 URL,我们必须指定 API 路由,否则 app 部署后,不能访问到它们。如果没有在 now.json 中指定的话,在访问任何路由或路由组时,都会出现以下错误。
![](https://s4.51cto.com/images/blog/202012/18/5c6b82936e1558a4d1d8e645de94f27a.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
在 now.json 中创建路由密钥, 按以下示例编辑 now.json :

{
"version": 2,
"builds": [{ "src": "index.js", "use": "@now/node-server" }],
"routes": [
{
"src": "/users",
"dest": "/index.js",
"methods": ["GET"]
},
{
"src": "/user",
"dest": "/index.js",
"methods": ["POST"]
}
]
}

这将两个可用的端点指向目标路径,也指定了每个端点上的可用 HTTP verbs。如果没有申明可用的方法,端点会被所有 HTTP request 可见。
这些路由也携带着给每条路由指定可用头文件和状态代码的密钥。可以点击链接下面的链接,获得有关发布时路由处理的更多信息: https://zeit.co/docs/v2/deployments/routes/
在命令行,用下面命令发布你的应用程序:

now

这样就发布了你的应用程序,并提供有效的 URL,在我的例子中,会看到如下信息:
![](https://s4.51cto.com/images/blog/202012/18/48cbb38cd33595b9ed566d0f80e19be4.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
你可以在 https://now-express.williamimoh.now.sh 上的 /users 里看到一个带服务器数据的对象。
### 问题
主要需要注意的是,也许你的服务器文件名字和 index.js 不一样,但是 Now 要求入口文件名字为 index,扩展名为 js,以便于识别。如果不遵守这个命名规范,则需要使用目录列表解析应用程序: https://zeit.co/docs/v2/routing/directory-listing
Now 要求入口 node 文件命名为 index.js。
一个变通的方法则是,在 now.json 中指定 home 路由,并把目标路径指向该服务器文件。这样,在 now.json 中指定的构建源文件就为该服务器文件。
假设在工程中将入口文件从 index.js 重命名为 server.js,now.json 则变为:

{
"version": 2,
"builds": [{ "src": "server.js", "use": "@now/node-server" }],
"routes": [
{
"src": "/",
"dest": "/server.js",
"methods": ["GET"]
},
{
"src": "/users",
"dest": "/server.js",
"methods": ["GET"]
},
{
"src": "/user",
"dest": "/server.js",
"methods": ["POST"]
}
]
}

}


可以在 Githuab 找到完整的工程: https://github.com/Chuloo/now-express
### 结论
在本文中,我们用 Now 部署了一个简单的 node 应用程序,并得到一个有效的 URL。我们也了解到使用 Now 部署一个应用程序会遇到的问题。如果你有任何的问题和建议,欢迎在本文后添加评论。
如果喜欢本文,请关注 Twitter 上的 @iChuloo: https://twitter.com/iChuloo \o Follow @iChuloo on Twitter
英文原文: https://scotch.io/tutorials/easily-deploy-a-serverless-node-app-with-zeit-now

用Now轻松部署无服务器Node应用程序

标签:iam   depend   node   erb   info   ext   lam   版本   lambda   

原文地址:https://blog.51cto.com/15057848/2567149

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!