基于 NodeJS 创建部署云应用

本文介绍如何基于 NodeJS 技术栈创建并部署一个简单的 Hello World 应用程序。

前提条件

操作步骤

整个操作流程分为以下 8 步:

创建小程序

  • 登录 蚂蚁金服开放平台,选择 开发者中心 > 小程序 > 创建
  • 填写 基本信息,点击 创建 按钮,创建应用名为 示例应用 小程序。

说明:一个账号下最多可以创建10个小程序;未提交过审核的小程序可以删除,删除的小程序不在计数范围。

创建云应用后端服务

  • 我的小程序 页面,选择刚创建的小程序,点击 查看,进入 开发管理 页面。
  • 点击左侧导航栏的 云服务(公测),在 云服务列表 页面点击 创建云服务 > 创建云应用
  • 创建云应用 页面,选择 NodeJS** 技术栈,填入 应用名称描述 (选填),点击 创建**。

构建环境

  • 返回 云服务 页面,点击刚创建的云服务卡片中的 构建环境 按钮。

  • 购买环境资源 页面,选择合适的环境配置方案,此处选择 小程序云应用入门(Mysql 版),点击 同意《产品服务协议》 > 确认配置

说明:当前测试环境该方案免费提供,但若连续 7 日未部署过代码,环境会被自动回收。

  • 订单详情 页面,点击 确认购买。购买成功后会自动进入 构建环境 页面。构建过程会耗时几分钟,构建成功后,您可以选择 查看应用详情 ,或者 返回应用列表

准备开发环境

打开小程序开发者工具,点击 新建项目

打开 volans

在新建项目向导中,选择 小程序,选择 空白模板,点击 下一步

新建项目

输入 项目名称,项目路径会自动填充,选择 云应用 为后端服务,点击 完成

项目名称

项目创建好后,进入开发界面。点击右上角的 登录 按钮,用支付宝扫码登录。

登录

关联前面 创建的小程序 应用。

关联前面创建的小程序

关联前面 构建的云应用环境,点击 确定

关联前面构建的云应用环境

编写应用前端代码

编写 client/pages/index/index.axml 文件,描绘应用的视觉结构。

示例应用的逻辑非常简单,只是显示一个按钮,当点击按钮的时候调用后端服务逻辑返回 hello world。因此,index.axml 中只需一个按钮,操作如下:

  • 打开 index.axml 文件。
  • 在文件中输入如下代码,为页面加入一个按钮。
  1. <view>
  2. <button>Click Me</button>
  3. </view>

保存文件后窗口右侧会实时渲染效果,如下图所示。

实时渲染效果

为点击按钮增加响应逻辑。

  • 打开 index.js 文件。
  • 编写响应按钮点击的函数。
  1. // client/pages/index/index.js
  2. Page({
  3. //...
  4. sayHello() {
  5. const domainName = 'app2113538814test.mapp-test.xyz';
  6. my.httpRequest({
  7. url: `https://${domainName}/say-hello`,
  8. success: (resp) => {
  9. my.alert({
  10. title: "来自云服务的问候",
  11. content: resp.data.data
  12. });
  13. },
  14. fail: (err) => {
  15. my.alert({
  16. title: "错误信息",
  17. content: JSON.stringify(err)
  18. })
  19. }
  20. });
  21. }
  22. });
说明:此处的域名 https://app2113538814test.mapp-test.xyz可以从 云应用详情 页的 二级域名 页签中复制得到。

二级域名

打开 index.axml 文件,把响应函数添加为按钮的 onTap 事件的回调。

  1. <view>
  2. <button onTap="sayHello">Click Me</button>
  3. </view>

编写应用后端代码

关闭 server/config/plugin.js 中的配置的 egg-mysql 插件。

目前,该应用中还不需要使用数据库。

egg-mysql

编写 server/app/controller/home.js

脚手架已经在这里写了一个 index,您可以加一个 sayHello

  1. // server/app/controller/home.js
  2. 'use strict';
  3. const Controller = require('egg').Controller;
  4. class HomeController extends Controller {
  5. async index() {
  6. this.ctx.body = 'hi, egg';
  7. }
  8. async sayHello() {
  9. this.ctx.body = {
  10. data: 'Hello world!'
  11. };
  12. }
  13. }
  14. module.exports = HomeController;

server/app/router.js 里配置路由。

配置路由

  1. // server/app/router.js
  2. 'use strict';
  3. /**
  4. * @param {Egg.Application} app - egg application
  5. */
  6. module.exports = app => {
  7. const { router, controller } = app;
  8. router.get('/', controller.home.index);
  9. router.get('/say-hello', controller.home.sayHello);
  10. };

至此,您已完成了后端服务的开发,准备将服务部署到云端。

发布部署应用

点开 云服务 右边的菜单,点击 上传服务端代码

上传服务端代码

上传及发布过程中,可以通过 查看日志 关注部署进度。

查看日志

部署进度

部署完成后,在本地点击按钮测试。

点击按钮测试

测试完成后,点击页面右上角的 上传 按钮将小程序上传到金融科技平台,也可以点击 预览,用手机支付宝 APP 扫码预览在手机上的真实效果。

重要:若要在手机上向服务器发送请求,您还需要到 小程序管理 页面 > 设置 > httpRequest 接口请求域名白名单,把 HTTP 请求的域名录入进去。

真实效果

上传完毕后,登录到开放平台提交审核。审核完毕后,小程序即可进行发布操作了。

连接 MySQL 数据库

在刚才的 Hello World 应用的基础上尝试连接云应用提供的 MySQL 数据库。

server/config/plugin.js 里开启 egg-mysql 插件。

修改 server/config/config.default.js 中的 MySQL 配置。

修改 MySQL 数据库的用户名和密码。如果使用 admin 账号,可以在 云应用详情 页的 数据库 页签中找到 admin 账户的初始密码。

修改 MySQL 数据库的用户名和密码

测试环境的 MySQL 中默认提供样例 sample 数据库,里面有一张预置的 user 表,从 user 表中读取数据。

user 表中读取数据

修改 controller/home.js 中的 sayHello 函数,获取数据库中的数据。

  1. // server/app/controller/home.js
  2. 'use strict';
  3. const Controller = require('egg').Controller;
  4. class HomeController extends Controller {
  5. async index() {
  6. this.ctx.body = 'Hello world!';
  7. }
  8. async sayHello() {
  9. const users = await this.app.mysql.select('user');
  10. const user = users && users[0] || {};
  11. this.ctx.body = {
  12. data: 'Hello! ' + user.name
  13. };
  14. }
  15. }
  16. module.exports = HomeController;

再次上传并部署服务端代码。

上传并部署服务端代码

本地测试。效果如下图。

测试效果

原文: https://docs.alipay.com/mini/cloud-service/bwwxu1