Новая эра полнофункциональной разработки небольших программ

база данных внешний интерфейс Апплет WeChat полный стек
Новая эра полнофункциональной разработки небольших программ

Ли Чэнси, старший инженер Tencent Cloud. После выпуска в 2014 году он присоединился к Tencent AlloyTeam и отвечал за такие проекты, как QQ group, Fantasia Live и Tencent Documents. Присоединился к команде разработчиков Tencent Cloud в 2018 году. Сосредоточьтесь на оптимизации производительности, инжиниринге и небольших программах.Вейбо | Знай почти | Github

Оригинальная ссылка

Что такое мини-программа облачной разработки

Облачная разработка мини-программы — это набор базовых возможностей мини-программы, совместно разработанных командой WeChat и командой Tencent Cloud.Короче говоря, облачные возможности станут базовыми возможностями мини-программ. Весь набор функций недавно запущен на базе Tencent Cloud.Облачная разработка (Tencent Cloud Base)Полный набор решений для фоновой разработки малых программ, разработанных компанией.

Mini Program Cloud Development предоставляет разработчикам полный облачный процесс, упрощает концепцию внутренней разработки, эксплуатации и обслуживания, не требует создания сервера и использует API, предоставляемый платформой для развития основного бизнеса, для быстрого запуска и итерация.

В настоящее время решение поддерживает три основные возможности:

  • Хранилище: загружайте/выгружайте облачные файлы непосредственно в интерфейсе апплета и управляйте ими визуально в облачной консоли апплета.

  • База данных: база данных документов, которой можно управлять во внешнем интерфейсе апплета, а также читать и записывать в облачной функции.

  • Облачная функция: код работает в облаке, естественная аутентификация по частному протоколу WeChat, разработчикам нужно только написать код бизнес-логики

В будущем мы интегрируем больше сервисных возможностей, чтобы обеспечить более мощную облачную поддержку мини-программ.

Как использовать мини-программу облачной разработки

Выше приведена простая карта использования облачной разработки апплетов: на стороне апплета вы можете напрямую использовать официально предоставленный интерфейс, а на стороне облачных функций вы можете напрямую использовать официально предоставленный Node SDK для управления облачными ресурсами. Построение базы данных и развертывание файловой системы, которые раньше беспокоили разработку небольших программ, вообще недоступны.

Вам нужно только иметь опыт разработки апплетовIDEвнутри云开发, открыть его, заполнить окружениеID, вы можете использовать облачные возможности мини-программ!

image

Конечно, приложение облачной разработки не исключает исходную фоновую архитектуру.Благодаря следующей архитектуре вы также можете быть полностью совместимы с исходными фоновыми службами, а также упростить логику аутентификации некоторых апплетов:

Далее я опишу, как использовать эти облачные ресурсы со стороны апплета и со стороны сервера соответственно.

Используйте облачные возможности

апплет

Клиент здесь относится к апплету. Если вы хотите использовать возможности облачной разработки, выполните следующие действия:

  • существуетapp.json / game.jsonв, добавьте поля в"cloud": true
  • Поле cloudfunctionRoot добавлено в project.config.json для указания каталога, в котором хранятся облачные функции.
  • Инициализировать возможности облачной разработки:
//app.js
App({
  onLaunch: function () {
    wx.cloud.init({
        traceUser: true // 用户信息会显示在云开发控制台的用户面板中
    });
  }
});

Мини-документ о возможностях инициализации программы

В управлении пользователями будет отображаться список пользователей доступа к апплету с использованием облачных возможностей.По умолчанию время доступа выстроено в обратном порядке.Точка срабатывания времени доступа - вызов апплета на стороне апплета.wx.cloud.initметод, при которомtraceUserПередаваемое значение параметраtrue.

Сервер

Если вы хотите работать с файлами, базами данных и ресурсами облачных функций в облачных функциях, вы можете использовать для работы наш серверный SDK. Сначала перейдите к одной из ваших облачных функций и установите следующие зависимости:

npm i --save tcb-admin-node

Инициализировать в облаке

// 初始化示例
const app = require('tcb-admin-node');

// 初始化资源
// 云函数下不需要secretId和secretKey。
// env如果不指定将使用默认环境
app.init({
  secretId: 'xxxxx',
  secretKey: 'xxxx', 
  env: 'xxx'
});

//云函数下使用默认环境
app.init()

//云函数下指定环境
app.init({
  env: 'xxx'
});

Документация по инициализации сервера

место хранения

Облачная разработка предоставляет такие возможности, как место для хранения, загрузка файлов, загрузка файлов и доступ к файлам с ускорением CDN.APIиспользовать эти способности.

апплет

// 选择图片
wx.chooseImage({
    success: dRes => {
        // 上传图片
        const uploadTask = wx.cloud.uploadFile({
            cloudPath: `${Date.now()}-${Math.floor(Math.random(0, 1) * 10000000)}.png`, // 随机图片名
            filePath: dRes.tempFilePaths[0], // 本地的图片路径
            success: console.log,
            fail: console.error
        });
    },
    fail: console.error,
});

Мини-программы Магазин документов

Сервер

const app = require('tcb-admin-node');
app.init();

app.uploadFile({
    cloudPath: "cover.png",
    fileContent: fs.createReadStream(`${__dirname}/cover.png`)
}).then((res) => {
    console.log(res);
}).catch((err) => {
    console.error(err);
});;

консоль

Загруженный файл появится в консоли, как показано ниже. Вы можете удалить, загрузить или просмотреть детали изображения в консоли.

Вы также можете управлять правами доступа к файлу в целом, вот некоторые особенности.

серверное хранилище документов

база данных

Mini Program Cloud предоставляет базу данных, ориентированную на документы. База данных содержит несколько коллекций (эквивалентных таблицам в реляционных данных). Коллекция аналогична массиву JSON. Каждый объект в массиве представляет собой запись. Формат записи — это JSON-документ.

Каждая запись имеет_idполе используется для уникальной идентификации этой записи,_openidПоле используется для идентификации создателя записи, то есть пользователя апплета. Разработчики могут настроить_id, но не может быть настроен на стороне апплета (это можно сделать на стороне сервера)_openid._openidОн создается системой по умолчанию в соответствии с пользователем мини-программы при создании документа, и разработчики могут использовать его для идентификации и поиска документа.

база данныхAPIОн разделен на две части: сторона апплета и сторона сервера, сторона апплетаAPIБлагодаря строгому контролю разрешений на вызовы разработчики могут напрямую звонить из апплета.APIВыполнять операции с неконфиденциальными данными. Для данных с повышенными требованиями к безопасности их можно передать через сервер в облачной функции.APIработать. Среда облачной функции полностью изолирована от клиента, а база данных может работать конфиденциально и безопасно в облачной функции.

база данныхAPIВ том числе возможность добавлять, удалять, изменять, искать, использоватьAPIЕсть только три шага для работы с базой данных: получить ссылку на базу данных, построить условие запроса/обновления и сделать запрос. Помните, что перед работой с базой данных создайте ее в консоли.collection.

апплет

const db = wx.cloud.database();

// 插入数据
db.collection('photo').add({
    data: {
        photo: 'cloud://tcb-xxx/05ca1d38f86f90d66d4751a730379dfa6584dde05ab4-Ma9vMN_fw658.jpg',
        title: '风景'
    }
});

// 提取数据
db.collection('photo').get().then((res) => {
    let data = res.data;
    console.log(data);
});

// 输出
// 在小程序端, _openid 会自动插入到数据库中
{
    photo: 'cloud://tcb-xxx/05ca1d38f86f90d66d4751a730379dfa6584dde05ab4-Ma9vMN_fw658.jpg',
    title: '风景',
    _openid: 'oLlMr5FICCQJV-QgVLVzKu2312121'
}

Документация по мини-программе базы данных

Сервер

const app = require('tcb-admin-node');
app.init();
const db = app.database();

db.collection('photo').limit(10).get().then((res) => {
    console.log(res);
}).catch((err) => {
    console.error(err);
});

// 输出
// 因为是在服务端,其它用户的也可以提取出来
{
    photo: 'cloud://tcb-xxx/05ca1d38f86f90d66d4751a730379dfa6584dde05ab4-Ma9vMN_fw658.jpg',
    title: '风景',
    _openid: 'oLlMr5FICCQJV-QgVLVzKu4312121'
}
{
    photo: 'cloud://tcb-xxx/0dc3e66fd6b53641e328e091ccb3b9c4e53874232e6bf-ZxSfee_fw658.jpg',
    title: '美女',
    _openid: 'DFDFEX343xxdf-QgVLVzKu3312121'
}
{
    photo: 'cloud://tcb-xxx/104b27e339bdc93c0da15a47aa546b6e9c0e3359c315-L8Px2Y_fw658.jpg',
    title: '动物',
    _openid: 'DFDFEX343xxdf-QgVLVzKu3412121'
}

Документация по базе данных сервера

консоль

Вы можете видеть данные пользовательских операций в консоли, а также можете самостоятельно добавлять, обновлять или удалять данные в консоли.

Если объем данных огромен, вы можете настроить индексы для повышения эффективности запросов.

База данных также может контролировать каждыйcollection.

облачная функция

Облачная функция — это фрагмент кода, который выполняется в облаке. Вам не нужно управлять сервером. Вы можете загрузить и развернуть внутренний код одним щелчком мыши в средстве разработки.

Разработчики могут получить контекст каждого вызова в облачной функции (appid,openidи т. д.), не поддерживая сложный механизм аутентификации, вы можете получить естественное и доверенное состояние входа пользователя (openid).

апплет

wx.cloud.callFunction({
    name: 'addblog', // 云函数名称
    data: { // 传到云函数处理的参数
        title: '云开发 TCB',
        content: '存储、数据库存、云函数'
    }
}).then(res => {
    console.log(res)
}).catch((err) => {
    console.error(err);
});

Мини-программа Облачная документация по функциям

Сервер

const app = require("tcb-admin-node");
app.init();

app.callFunction({
    name: 'addblog', // 云函数名称
    data: { // 传到云函数处理的参数
        title: '云开发 TCB',
        content: '存储、数据库存、云函数'
    }
}).then((res) => {
    console.log(res);
}).catch((err) => {
    console.error(err);
});

Документация по облачным функциям сервера

консоль

После загрузки облачные функции будут перечислены здесь.

Каждый раз, когда вызывается облачная функция, вы можете просмотреть здесь журнал, а также можете построить тестовые параметры для отладки.

синтаксический сахар

Большинство интерфейсов в настоящее время поддерживают два способа записи, а именно Promise и Async/Await.Этот раздел начинается сcallFunctionНапример, в云函数Познакомьте с этими двумя способами письма.Async/AwaiТ основан наPromiseСинтаксис, это простоPromiseПреобразовано только в синхронную запись.

Promise

const app = require("tcb-admin-node");
app.init();

exports.main = (event, context, callback) => {
    app.callFunction({
        name: 'addblog', // 云函数名称
        data: { // 传到云函数处理的参数
            title: '云开发 TCB',
            content: '存储、数据库存、云函数'
        }
    }).then((res) => {
        console.log(res);
        callback(null, res.data);
    }).catch((err) => {
        callback(err);
    });
};

Async/Await

const app = require("tcb-admin-node");
app.init();

exports.main = async (event, context) => {
    let result = null;

    try {
        result = await app.callFunction({
            name: 'addblog', // 云函数名称
            data: { // 传到云函数处理的参数
                title: '云开发 TCB',
                content: '存储、数据库存、云函数'
            }
        });
    }
    catch (e) {
        return e;
    }

    return result;
};

Используется в облачных функциях, т.к.Node 8.9или выше, и поэтому, естественно, поддерживаетAsync/AwaitМетод допроса, но если вы хотите использовать его на стороне Сяочэн, вам нужно ввести дополнительныеPolyfill, например, этот проект с открытым исходным кодом:regenerator

Ресурсы для разработчиков

Поскольку Mini Program Cloud Development основана на функциях облачной разработки и разработки Tencent Cloud, существует множество ресурсов для разработчиков как в Tencent Cloud, так и в Mini Programs, вот для справки: