文章目录

  • 说明:
  • 第一天(0803):
  • 第二天(0804):
    • 1. 安装MidwayJs
    • 2. f create新建项目
    • 3. 安装依赖
    • 4. invoke输出
    • 5. 在输出中添加自己的名字
  • 第三天(0805):
    • 1. 云开发平台新建应用
    • 2. cloudIDE
  • 第四天(0806):
    • 1.云开发平台新建应用
    • 2. cloudIDE
      • a.点击“开发部署”,进入cloudIDE
      • b.安装依赖
      • c.在app.js文件下面添加代码
      • d.启动应用
  • 第五天(0807):
    • 1. 云开发平台新建应用
    • 2.cloudIDE
      • a.进入IDE,安装依赖
      • b.表格存储
      • c.回到cloudIDE
  • 第六天(0810):
    • 1.云开发平台新建应用
    • 2.cloudIDE
      • a.安装依赖
      • b.部署
  • 第七天(0812):
    • 1.云开发平台新建应用
    • 2. 后端
      • a.编写入口文件:
      • b.新建后端文件`user.ts`
    • 3. 前端
    • 4.完成截图

说明:

都是写给自己和小姐妹看的东西,简单且繁琐,一堆废话。大佬就别点进来耽误时间了emm。

第一天(0803):

  • 作业内容

创建新应用后邀请伙伴加入

  • 备注
    但是不知道是什么原因,我和我的小伙伴都无法复制出邀请链接,于是用创建子账号的方式添加了应用成员。

第二天(0804):

  • 作业内容

安装node.js之后配置MidwayJs,使用f create创建一个标准函数,使用invoke返回helloworld和自己的名字。

  • 备注
    这作业乍一看有些复杂,因为我还没接触过f create这个命令。但好在钉钉群里给了教程,可以跟着做。(首先需要安装node.js,网上很多教程,我就不写了)
  • 实现过程
1. 安装MidwayJs

在终端(windows:对着左下角右键,管理员身份运行)使用npm i @midwayjs/faas-cli -g命令安装MidwayJs,首先出现了第一个报错:

小知识:
--save相当于-s,
--global相当于-g,
--save-dev相当于-d,
--save-optional相当于-o,
--save-exact相当于-e。


容易看出,错误原因是没有这条命令的执行权限(因为在mac上好像没有管理员权限的命令行窗口,实现管理员权限靠的是命令前加上sudo,所以经常因为忘记加sudo而报错)。
忽略warn,似乎安装成功了。

2. f create新建项目

按照教程,下一步是“f create”->回车->项目名->回车,但我在f create后,终端会变成不可输入的状态。
无法输入用户名。然后我一顿瞎按,发现还需要再按一次回车emmm…第二次回车是选中蓝色的那行默认标准。所以流程是“f create”->回车->回车->项目名->回车->回车。

还有个小心心,还挺可爱。

3. 安装依赖


输入这两行代码:第一行:进入新建的项目目录,第二行:下载依赖(=npm install)。

4. invoke输出

最后,输入f invoke -f index,得到hello world,完成。

5. 在输出中添加自己的名字

并没有完成,我没有返回我的名字。又换了个教程发现要在vs里面写(安装vs可以在网上找教程,有很多很好玩的插件可以设置,如果下载速度太慢的话就找一下镜像文件)。打开vs。
先在电脑里搜索刚刚新建的项目文件夹:helloworld-demo,
然后把这个文件夹拖入vs,成功打开。

有“node_modules”这个文件夹,说明已经安装好依赖了。
在这里加上自己的名字,之后在终端输入f invoke -f index。如果没有终端的话cmd+shift+p(win的话应该是crl+alt+p?此处存疑),打开终端。

成功输出helloworld和名字,截图交作业。

第三天(0805):

继续写(chao)作业。

  • 作业内容

在云开发平台根据技术场景模版创建“Midway Serverless
一体化解决方案”应用,通过浏览器访问函数接口,修改函数代码加上你的名字返回

  • 备注
    感觉自己好像会了一些东西。
  • 实现过程
1. 云开发平台新建应用

打开阿里云主页https://cn.aliyun.com/->开发者->云开发平台

进入应用列表->新建应用->设置如图

自己填,然后完成就行了。

2. cloudIDE

点击开发部署,进入cloudIDE终端在这

在终端输入npm i安装依赖。
安装完成,warn忽略。
找到index.ts文件,在message中添加上自己的名字。

然后在终端输入npm run dev

得到一个网址,点击打开这个网址,截图上交。

第四天(0806):

  • 作业内容

在云开发平台使用“Koa应用迁移方案”模板创建一个Koa应用,使用koa-ejs进行服务端渲染,通过浏览器访问你开发的http接口,返回Hi Serverless加上你的名字截图即可

  • 备注
    感觉每天都在接触新词汇,慢慢来吧。
    “知道的越多,越觉得自己什么都不知道,但是确实是知道的越来越多了。”
  • 实现过程
1.云开发平台新建应用

和第三天的1.是差不多的,只是具体的选项选的不一样,这里我们根据题目选择web-Koa应用迁移方案

2. cloudIDE
a.点击“开发部署”,进入cloudIDE

b.安装依赖

这一步在第三天的2.中有讲过。
在终端输入npm i

c.在app.js文件下面添加代码
router.get('/', (ctx, next) => {ctx.body = '<h1>Hi Serverless 你的名字</h1> '
});

d.启动应用

在终端输入node app.js
然后左下角点击预览->端口号输入3000->访问

成功。

第五天(0807):

  • 作业内容

在云开发平台使用实验室:WEB 解决方案:Midway Serverless OTS数据库示例模板创建Todo List应用,利用自己OTS数据库,添加一条自己名字的Todo并截图

  • 备注
    最后三次作业啦!冲冲冲~
  • 实现过程
1. 云开发平台新建应用

设置如图

2.cloudIDE
a.进入IDE,安装依赖

在终端输入npm i

b.表格存储

进入阿里云OTS表格存储网站https://www.aliyun.com/product/ots,开通表格存储

进入控制台,创建实例


输入一个好记的实例名称,别的不用更改,确定即可。
进入实例管理,

得到公网ip。

点击创建数据表,

表名称为list,主键为id。

点击确定。
获取自己的accesskey ID和accesskey Secret,未创建的可以点击新建。

c.回到cloudIDE

找到文件“src/apis/configuration.ts“,

找到这端代码,

依次将信息改为自己的accesskey ID、accesskey Secret、公网ip、实例名称,记得要用 ’ ’ 扩起来。
crtl+s保存之后,在终端输入npm run dev,得到一个网址,(com/crtl+单机)打开网址后,输入自己的名字并回车,截图交作业。

第六天(0810):

  • 作业内容

在云开发平台使用 “Midway Serverless Mysql 数据库示例”创建一个函数应用,编写查询共有多少条数据的sql语句,执行函数返回数据数量,截图即可

  • 备注
    现在是8.12早上7:30,做噩梦惊醒之后突然意识到这个作业昨晚截止,不愧是我qwq但是有始有终叭,把记录给写完。
  • 实现过程
1.云开发平台新建应用

实验室->web->Midway Serverless MySQL数据库示例

2.cloudIDE
a.安装依赖

npm i --registry=https://registry.npm.taobao.org

b.部署

在f.yml里编写入口文件

   count:handler: count.headlerevents:- apigw:path: /api/count

在index.ts里面编写一个函数

  @Func('count.handler')async count() {const result = await this.db.query(`select count(*) from todo`);return result;}


在终端输入npm run dev,得到一个地址,在地址后添加/api/count后访问,得到结果。

第七天(0812):

  • 作业内容

在云开发平台使用 MySQL 或者 OTS 模板创建应用,使用自己的对应数据库实现一个注册和登陆系统,提交2个截图,①注册成功后提示注册成功的截图,②使用注册的账号登录,展示信息的截图

  • 备注
    最后一天作业啦!
  • 实现过程
  • 参考资料:云开发创造营 · 第七天课程资料
1.云开发平台新建应用

参考第五天内容,新建ots类型应用,创建表格存储,记得在configuration.ts里关联实例。

2. 后端
a.编写入口文件:
  register:handler: user.registerevents:- apigw:path: /api/registerlogin:handler: user.loginevents:- apigw:path: /api/login

b.新建后端文件user.ts

import { Func, Inject, Provide } from '@midwayjs/decorator';
import TableStore from 'tablestore';
import format from 'otswhere/format';
@Provide()
export class TodoService {@Inject()ctx;@Inject()tb;@Func('user.login')async login() {const { name, password } = this.ctx.query;const params = {tableName: 'user',direction: TableStore.Direction.BACKWARD,inclusiveStartPrimaryKey: [{ id: TableStore.INF_MAX }],exclusiveEndPrimaryKey: [{ id: TableStore.INF_MIN }]};return new Promise(resolve => {this.tb.getRange(params, (_, data) => {const rows = format.rows(data, { email: true });const userExists = rows.list.findIndex(user => user.name === name) !== -1if (!userExists) {resolve({success: false,message: '用户不存在'})return}const user = rows.list.find(user => user.name === name)console.log(user.password, password)if (user.password !== password) {resolve({success: false,message: '密码错误'})return}resolve({success: true,user});});})}@Func('user.register')async register() {const { name, password } = this.ctx.query;const params = {tableName: "user",condition: new TableStore.Condition(TableStore.RowExistenceExpectation.IGNORE, null),primaryKey: [{ id: `${Date.now()}-${Math.random()}` }],attributeColumns: [{ name },{ password },{ status: '1' }]};return new Promise(resolve => {this.tb.putRow(params, async function (err, data) {if (err) {resolve({success: false,errmsg: err.message});} else {resolve({success: true,data});}});});}
}

下面代码覆盖index.tsx

import React, { useEffect, useState } from 'react'
import ReactDOM from 'react-dom';export default function App() {const [name, setName] = useState('')const [password, setPassword] = useState('')const handleSubmit = () => {console.log(name, password)fetch(`/api/register?name=${name}&password=${password}`).then(resp => resp.json()).then(resp => {console.log(resp)if (resp.success == true) {alert('注册成功')}})}const handleLogin = () => {fetch(`/api/login?name=${name}&password=${password}`).then(resp => resp.json()).then(resp => {if (resp.success == true) {alert(`登录成功,提示信息:${resp.user.name}`)} else {alert(`登陆失败,提示信息:${resp.message}`)}})}return (<div className="min-h-screen flex items-center justify-center bg-gray-50 py-12 px-4 sm:px-6 lg:px-8"><div className="max-w-md w-full"><div><img className="mx-auto h-12 w-auto" src="https://tailwindui.com/img/logos/workflow-mark-on-white.svg" alt="Workflow" /><h2 className="mt-6 text-center text-3xl leading-9 font-extrabold text-gray-900">注册或者登录</h2></div><form className="mt-8" action="#" method="POST"><input type="hidden" name="remember" defaultValue="true" /><div className="rounded-md shadow-sm"><div><inputonChange={e => { setName(e.target.value) }}//获取前端用户名aria-label="Email address" name="email" type="email" required className="appearance-none rounded-none relative block w-full px-3 py-2 border border-gray-300 placeholder-gray-500 text-gray-900 rounded-t-md focus:outline-none focus:shadow-outline-blue focus:border-blue-300 focus:z-10 sm:text-sm sm:leading-5" placeholder="Email address" /></div><div className="-mt-px"><inputonChange={e => { setPassword(e.target.value) }}//获取前端密码aria-label="Password" name="password" type="password" required className="appearance-none rounded-none relative block w-full px-3 py-2 border border-gray-300 placeholder-gray-500 text-gray-900 rounded-b-md focus:outline-none focus:shadow-outline-blue focus:border-blue-300 focus:z-10 sm:text-sm sm:leading-5" placeholder="Password" /></div></div><div className="mt-6"><button type="button" onClick={handleSubmit} className="group relative w-full flex justify-center py-2 px-4 border border-transparent text-sm leading-5 font-medium rounded-md text-white bg-indigo-600 hover:bg-indigo-500 focus:outline-none focus:border-indigo-700 focus:shadow-outline-indigo active:bg-indigo-700 transition duration-150 ease-in-out"><span className="absolute left-0 inset-y-0 flex items-center pl-3"></span>注册</button></div><div className="mt-6"><button type="button" onClick={handleLogin} className="group relative w-full flex justify-center py-2 px-4 border border-transparent text-sm leading-5 font-medium rounded-md text-white bg-indigo-600 hover:bg-indigo-500 focus:outline-none focus:border-indigo-700 focus:shadow-outline-indigo active:bg-indigo-700 transition duration-150 ease-in-out"><span className="absolute left-0 inset-y-0 flex items-center pl-3"></span>登录</button></div></form></div></div>)}ReactDOM.render(<React.StrictMode><App /></React.StrictMode>,document.getElementById('root')
);
3. 前端

下面代码覆盖public/index.html

<!DOCTYPE html>
<html lang="en"><head><meta charset="utf-8" /><link rel="icon" href="%PUBLIC_URL%/favicon.ico" /><meta name="viewport" content="width=device-width, initial-scale=1" /><meta name="theme-color" content="#000000" /><metaname="description"content="Web site created using create-react-app"/><link rel="apple-touch-icon" href="%PUBLIC_URL%/logo192.png" /><!--manifest.json provides metadata used when your web app is installed on auser's mobile device or desktop. See https://developers.google.com/web/fundamentals/web-app-manifest/--><link rel="manifest" href="%PUBLIC_URL%/manifest.json" /><!--Notice the use of %PUBLIC_URL% in the tags above.It will be replaced with the URL of the `public` folder during the build.Only files inside the `public` folder can be referenced from the HTML.Unlike "/favicon.ico" or "favicon.ico", "%PUBLIC_URL%/favicon.ico" willwork correctly both with client-side routing and a non-root public URL.Learn how to configure a non-root public URL by running `npm run build`.--><title>Todo List</title><link href="https://cdn.bootcdn.net/ajax/libs/tailwindcss/1.6.2/tailwind.min.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div><!--This HTML file is a template.If you open it directly in the browser, you will see an empty page.You can add webfonts, meta tags, or analytics to this file.The build step will place the bundled scripts into the <body> tag.To begin the development, run `npm start` or `yarn start`.To create a production bundle, use `npm run build` or `yarn build`.--></body>
</html>
4.完成截图


阿里云实践项目作业记录相关推荐

  1. B/S模式网站发布到本地及阿里云服务器 操作流程总结记录——结语

    至此,关于B/S模式网站发布到本地及阿里云服务器的操作流程记录已告一段落,本文档就结合C11案例来展开,介绍了B/S模式的网站开发及发布的基本流程和操作.其中,通过本文档的介绍,可以了解如下知识点: ...

  2. ERP物理机迁移至阿里云实践

    摘要: ERP物理机迁移至阿里云实践 机房选型 随着公司的不断发展,业务量逐渐增大,对信息化的要求也越来越高,随之对信息部的要求也越来越多,为此公司决定对现有的信息系统进行升级改造. ERP物理机迁移 ...

  3. pythonmysql部署_详解centos7+django+python3+mysql+阿里云部署项目全流程

    (PS:本文假设你已经在本地联调好django和客户端,只是需要将django部署到外网) 购买阿里云服务器 到[阿里云官网],选择轻量应用服务器, 步骤如图所示: 地域随便选择哪一个,镜像的话,对比 ...

  4. QQ邮箱 接受 天气查询 阿里云自动运行学习记录

    QQ邮箱 接受 天气查询 阿里云自动运行学习记录 学习记录 QQ邮箱 接受 天气查询 阿里云自动运行学习记录 前言 一.对于天气的查询 1.中华万年历API接口,获取天气信息 二.qq邮箱的使用步骤 ...

  5. 基于STM32的阿里云物联网项目实战

    引言:之前自学了一些关于阿里云物联网项目的开发,收获颇丰,但是总感觉网上的东西太散了,需要自己去不停的收集整理,于是在项目结束后决心自己写一篇比较具有实用性的指导文档,需要声明的是本文档只适合像我一样 ...

  6. android使用阿里云推流播放器记录

    android使用阿里云推流播放器记录: 在这里扯一句,如何删除csdn自己上传的资源:(参考:https://blog.csdn.net/qq_38122230/article/details/79 ...

  7. 阿里云开源项目 OAM 负责人张磊入选「中国开源先锋 33 人」

    来源|阿里巴巴云原生公众号 2020 年 12 月 23 日,由 SegmentFault 思否发起的第二届"中国技术先锋"年度评选结果揭晓,CNCF 应用交付领域小组 Co-ch ...

  8. 开源中国众包第二波阿里云悬赏项目,总金额30万

    昨天开源中国众包平台正式发布了合作伙伴 -- 阿里云的第一波的3个悬赏项目,总金额10万(详情),目前三个项目已经结束报名正式进入开发阶段. 现在第二波4个悬赏项目已经发布,总金额超过30万,分别是: ...

  9. 【对象存储】关于阿里云OSS踩坑记录

    前言:最近笔者通过PHP做了一个上传文件到阿里云OSS存储的程序,在上传过程中官方文档写的很清楚,几乎没有遇到什么问题,但在访问文件的过程中,遇到了问题,由于笔者的bucket是私有域,所以访问时,首 ...

最新文章

  1. mongo实现消息队列
  2. matlab的NLP功能,pyhanlp 共性分析与短语提取内容详解
  3. YUV420图像格式
  4. oracle sqlldr详解,sqlldr详解
  5. 由两个问题引发的对GaussDB(DWS)负载均衡的思考
  6. 斐波那契数列的性质整理
  7. 上下求索——基于双向推理的多跳知识库问答技术
  8. 在一个字符串中找到第一个只出现一次的字符,并返回它的位置
  9. IE调试网页之二:F12 开发人员工具入门 (Windows)
  10. CF891E Lust 生成函数
  11. 测试视频软件支持的格式,支持82种视频格式!电视平台最强的本地播放器!
  12. matlab工具箱安装
  13. Homebrew 安装以及更新源替换
  14. 微生活完成3200万元A轮融资,助企业快速搭建移动互联CRM
  15. android微信炸弹代码,微信炸弹怎么弄 微信8.0扔炸弹攻略[多图]
  16. 推荐一款简单易用线上引流测试工具:GoReplay
  17. OpenAI 推出漏洞赏金计划,最高奖励 2 万美元;京东零售开启 5 年来最大组织变革;​Django 4.2|极客头条
  18. QQ空间获取指定QQ号信息接口
  19. Spring Boot gradle 打包瘦身减少jar包体积 含demo
  20. 一张能关机的“照片”

热门文章

  1. Android 日历开发教程[五]
  2. 使用自定义键盘切换大小写功能失效,一直显示大写字母
  3. 怎么查看8080端口被占用详细教程
  4. 手机邮箱收不到验证邮件怎么办,分享邮箱没有收到验证邮件的解决办法
  5. 一狼 GHOST 系统_sp3_v2.4.iso
  6. VTK图像处理颜色映射(一)
  7. 巴比特 | 元宇宙每日必读:潍坊市出台元宇宙发展计划和扶持政策,力争到2026年元宇宙产业规模达到3500亿元...
  8. 用AI绘制2.5D人物插画教程
  9. 2.6 矩阵的初等变换
  10. 数据挖掘之利用Python画相关性矩阵图