将 Node.js 微服务部署到 ZEIT Now

2025-06-09

将 Node.js 微服务部署到 ZEIT Now

ZEIT Now是一个部署无服务器应用程序的云平台,我最喜欢 Now 的一点是他们的 DX(开发者体验),它使得将微服务部署到云端变得非常愉快。

在本文中,我们将学习如何安装 Now 并使用单个命令开始部署now

先决条件

安装

首先,让我们通过运行以下命令now来安装 CLI :npm

$ npm install -g now
Enter fullscreen mode Exit fullscreen mode

登录

接下来,我们需要在平台中识别自己,nowCLI 提供了一种简单的方法,通过运行:

$ now login
Enter fullscreen mode Exit fullscreen mode

这将要求您提供电子邮件并向您发送一封验证电子邮件,只需单击“验证”即可登录平台,就像魔术一样🔮!

验证电子邮件

验证电子邮件

从终端成功登录

从终端成功登录

创建您的第一个微服务

我们已准备好开始创建我们的第一个应用microservice程序(或无服务器应用程序,您可以随意命名)。

现在提供了一个示例列表,对于我们的练习,我们将使用 Node.js ⬢,但是嘿!现在也支持其他语言和平台,只需尝试一下你最喜欢的那个 😉

首先从 Node.js 模板运行以下命令:

$ now init nodejs microservice
Enter fullscreen mode Exit fullscreen mode

这将创建一个名为microserviceNode.js 模板的文件夹。

现在是时候将我们的示例部署到云端了,让我们转到该文件夹​​并执行now以查看会发生什么!

$ cd microservice
$ now
Enter fullscreen mode Exit fullscreen mode

部署到现在

部署到 Now 并运行我们的微服务

这太神奇了

在继续我们的下一个技巧之前,让我们先来探索一下我们正在部署的文件:

index.js

request它包含一个带有 Node.js对象的简单函数response,该函数将在对我们的微服务发出的每个请求时执行。

module.exports = (req, res) => {
  res.end(`Hello from Node.js on Now 2.0!`);
};
Enter fullscreen mode Exit fullscreen mode
index.js

now.json

它是部署配置文件,用于指定我们项目的名称、我们将要使用的构建器类型、路线等。更多信息可以在他们的文档中找到。

{
    "version": 2,
    "name": "nodejs",
    "builds": [
        { "src": "*.js", "use": "@now/node" }
    ]
}
Enter fullscreen mode Exit fullscreen mode
now.json

单一仓库

到目前为止,我们所看到的看起来很简单,但是,真正的力量就在这里now,我们可以混合和匹配不同的微服务来monorepo创建一个完整的无服务器项目。

对于我们的下一个技巧,我们将创建一个Nuxt.js静态应用程序,它将向 Node.js 微服务发出 API 请求,两者都将now使用该monorepo方法进行部署。

让我们创建一个monorepo文件夹然后运行create-nuxt-app,这将为您创建一个基本的 Nuxt.js 应用程序,只需确保Axios在功能部分选择支持,我们稍后会使用它😉。

$ mkdir monorepo
$ cd monorepo
$ npx create-nuxt-app www
Enter fullscreen mode Exit fullscreen mode

创建 Nuxt 应用

创建 Nuxt 应用

我们的前端应用程序几乎已经准备好了,我们需要为我们的monorepo项目添加一个 API,让我们创建一个api文件夹并在其中添加一个 Node.js microservice(不需要创建now.json,我们稍后会处理)。

让我们创建一个bands微服务:

$ mkdir api
$ touch api/bands.js
Enter fullscreen mode Exit fullscreen mode

api/bands.js

module.exports = (req, res) => {
  const bands = [
    {
      name: 'Dio',
      genre: 'Heavy Metal'
    },
    {
      name: 'Anthrax',
      genre: 'Trash Metal'
    },
    {
      name: 'Tenebrarum',
      genre: 'Gothic Metal'
    }
  ]
  res.end(JSON.stringify(bands))
}
Enter fullscreen mode Exit fullscreen mode

是的,我喜欢金属🤘

让我们创建一个部署配置文件来连接 monorepo 中的两个项目。

now.json

{
  "version": 2,
  "name": "monorepo",
  "builds": [
    { "src": "www/package.json", "use": "@now/static-build" },
    { "src": "api/*.js", "use": "@now/node" }
  ],
  "routes": [
    { "src": "/api/(.*)", "dest": "/api/$1" },
    { "src": "/(.*)", "dest": "/www/$1" }
  ]
}
Enter fullscreen mode Exit fullscreen mode

有关路线如何在其文档中工作的更多信息

在这里,我们使用两个不同的无服务器应用程序在一个 repo 中创建 API 和 Web 项目,一个由 提供服务@now/node,另一个由 构建@now/static-build

在部署之前,让我们将以下内容添加到我们的www项目中:

  • now-build向文件中添加package.json如下脚本:
"now-build": "API_URL=https://monorepo.julianduque.now.sh npm run generate"
Enter fullscreen mode Exit fullscreen mode

这将设置Axios为在正确的 URL 中发现我们的 API 端点(请确保在此处使用您的别名),并将告诉now如何为 Nuxt 生成静态站点。

  • 让我们更新pages/index.vue页面以执行我们用 Node.js 实现的 Bands 微服务
export default {
  components: {
    Logo
  },
  data: function () {
    return {
      bands: []
    }
  },
  methods: {
    async loadBands () {
      try {
        this.bands = await this.$axios.$get('/api/bands.js')
      } catch (err) {
        console.error(err)
      }
    }
  }
}
Enter fullscreen mode Exit fullscreen mode
  • 添加一个按钮<template>并使用 Vue.js 渲染项目
<a v-on:click="loadBands">Load Bands</a>
<ul v-bind:key="band.name" v-for="band in bands">
  <li>{{ band.name }} - {{ band.genre }}</li>
</ul>
Enter fullscreen mode Exit fullscreen mode

瞧!现在,我们已经将两个无服务器应用程序连接到一个 monorepo 中了!

令人震惊

我希望你喜欢这个教程,如果你会说西班牙语,我邀请你参加我在Twitch上每两周一次的 Node.js 秀- Node.js ¡En Vivo! 💜

鏂囩珷鏉ユ簮锛�https://dev.to/julianduque/deploying-node-js-microservices-to-zeit-now-54j7
PREV
如何在没有 Docker Desktop 的情况下在 Windows 上安装 Docker CLI
NEXT
使用 React Query 解决 React 应用中的状态管理