起动器ð
这篇博客文章探讨了我在Comp 1800的项目体验中。如果您不熟悉我的身份,可以参考我的post介绍。
有关Comp 1800的简要概述,请查看我最近的post。
我听说在面试中对自己的项目有深刻的了解可能是有益的。考虑到这一点,我正在推出一个名为“ Projects”的新系列,我将讨论并深入研究我从事的项目的技术组成部分。
comp1800ð±
在Comp 1800中,该项目的主题是解决与极端天气有关的问题。该项目着重于几个考虑因素,包括预防,预测,准备,应对和恢复。我的团队由三名成员组成,选择通过促进环保生活方式来专注于预防。
敏捷方法ð -
Comp 1800采用了敏捷软件开发生命周期(SDLC)方法,并将几周分为冲刺。如上图所示,步骤是:(1)计划,(2)设计,(3)开发,(4)测试,(5)部署和(6)审核。
-
计划
在计划阶段,我们为每个冲刺制作了新的用户故事,重点是基于红色路线分析的实现功能。我们为此目的使用了Trello和Figjam等工具。 -
设计
在设计阶段,我们为决定实现的功能创建了线框,与该特定冲刺的用户故事相对应。 -
发展
在开发阶段,我们开始为用户故事进行实际编码。我们的技术堆栈包括HTML5/CSS3,JavaScript,Bootstrap,Node.js,Express.js,Firebase和Google Cloud Cloud API。我将稍后再深入研究。 -
测试
鉴于这个项目是我们的第一个项目,我们的测试是有限的。我们没有实施单元或集成测试。但是,我们确实与同行进行了可用性测试。 -
部署
与典型的敏捷过程不同,我们直到最后才完全部署应用程序。我们使用Glitch.me进行部署。 -
评论
我们的审查在课程中采用了演讲的形式,在此期间,我们收到了反馈并从同龄人那里解决了问题。
代码评论ð
初始化ð 在我们的应用中,我们将Express用作Node.js Web Framework Middleware。 CORS标题ð» 我们还设置了交叉原始资源共享(CORS)标题以允许任何来源的请求。 静态文件服务和路线ð 使用Express,我们使用静态文件服务。例如,可以通过/js路由访问./public/js目录中的任何文件。 我们还手动为所有页面设置了路线,这有些乏味。一个例子是: 服务器初始化ð 最后,我们在端口8000上初始化并运行了Express Server。节点和Express
// Initialization
const express = require("express");
const app = express();
// Middleware
app.use(express.json());
app.use((req, res, next) => {
res.setHeader('Access-Control-Allow-Origin', '*');
res.setHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE');
res.setHeader('Access-Control-Allow-Headers', 'Content-Type, Authorization');
next();
});
app.use(express.static('app'));
app.use("/js", express.static("./public/js"));
app.use("/css", express.static("./public/css"));
app.use("/img", express.static("./public/img"));
app.get('/', (req, res) => {
res.sendFile(__dirname + '/app/html/index.html');
});
app.listen(8000, () => {
console.log('Server started on port 8000');
});
初始化ð 初始化壁垒相对简单。我们要做的就是去firebase.google.com开始一个项目。设置项目后,我们要做的就是将firebase安装为节点软件包( 身份验证ð 我们还使用Firebase进行身份验证。我们使用Firebase UI小部件进行身份验证和用户日志。您可以检查here中的身份验证和符号。 firebase
$ npm install firebase
)并复制firebase配置。
//----------------------------------------
// Your web app's Firebase configuration
//----------------------------------------
var firebaseConfig = { //Input firebase API keys
apiKey: "",
authDomain: "",
projectId: "",
storageBucket: "",
messagingSenderId: "",
appId: "",
};
//--------------------------------------------
// initialize the Firebase app
// initialize Firestore database if using it
//--------------------------------------------
const app = firebase.initializeApp(firebaseConfig);
const db = firebase.firestore();
const storage = firebase.storage();
排行榜ð 首先,建立了一个变量,以检索具有ID“排行榜框架”的DOM元素的引用,该元素涉及排行榜表的tbody元素。 基于排行榜逻辑,我使用了document.Createelement和附录方法来相应地显示用户。 任务ð 对于任务,我使用Firestore数据库的随机种子值随机显示任务。 基于任务,我实现了函数以选择图像文件上传以调用Google Vision API,以使用标签检测分析图像。 如果响应返回为有效,则将任务标记为已完成,添加关联点,并删除完成的任务。 JavaScript细节
我们编写的JavaScript代码与文档对象模型(DOM)交易,我将在我专门编写的代码中进行解释。
var leaderboardTable = document.getElementById("leaderboard-body");
var user = doc.data();
var points = user.points;
// Increment rank if points are lower than previous user's points
if (points !== previousPoints) {
rank++;
}
var row = document.createElement("tr");
var rankCell = document.createElement("td");
rankCell.textContent = rank;
row.appendChild(rankCell);
var nameCell = document.createElement("td");
nameCell.appendChild(
document.createTextNode(user.displayName || user.name)
);
row.appendChild(nameCell);
var pointsCell = document.createElement("td");
pointsCell.textContent = points;
row.appendChild(pointsCell);
const ecoActions = await getEcoActions();
const randomTasks = [];
for (let i = 0; i < 3; i++) {
const randomIndex = Math.floor(Math.random(seed) * ecoActions.length);
const randomTask = ecoActions[randomIndex];
randomTasks.push(randomTask);
ecoActions.splice(randomIndex, 1);
}
const taskList = document.getElementById("task-list");
taskList.innerHTML = "";
const imageUrl = await fileRef.getDownloadURL();
// Call the Google Vision API to analyze the image
const apiKey = API_KEY;
const url = `https://vision.googleapis.com/v1/images:annotate?key=${apiKey}`;
const data = {
requests: [
{
image: {
source: {
imageUri: imageUrl,
},
},
features: [
{
type: "LABEL_DETECTION",
},
],
},
],
};
const response = await fetch(url, {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify(data),
});
const json = await response.json();
结论â€
这是一个很长的帖子,我感谢您抽出宝贵的时间阅读它。我不确定这是否是进行我的代码审查的正确方法,因此任何建议都非常感谢!
如果您有兴趣深入研究代码,则可以查看存储库。
再次感谢您!请继续关注以后的帖子。 ðρ