📜  项目理念 |日出日落时间查找器(1)

📅  最后修改于: 2023-12-03 15:42:27.616000             🧑  作者: Mango

项目理念 | 日出日落时间查找器

介绍

日出日落时间查找器是一款可以帮助用户查找全球任何一个城市今日和未来七天的日出日落时间的应用。

通过将该应用集成到其它天气预报应用中,用户可以更便捷地获取天气信息,并更好地规划自己的时间。

功能
  • 输入城市名,获取该城市今日和未来七天的日出日落时间
  • 支持全球任意一个城市
  • 可以对查询的结果进行排序(按照时间、距离等)
  • 可以将查询结果保存为文本文件或请登记上传至指定的云端存储中
技术栈
  • 前端:React、HTML、CSS、JavaScript
  • 后端:Node.js、Express.js
  • 数据库:MongoDB
  • 云服务:AWS
架构实现

本项目采用前后端分离的模式,前端使用React框架,后端使用Node.js+Express.js,数据库使用MongoDB,云服务使用AWS。

系统架构如下图所示:

![系统架构图](./architecture.png)

系统采用以下设计模式:

  • MVC:前后端分离,前端负责View,后端负责Model和Controller
  • 多线程:使用Node.js实现多线程机制,对于每个查询请求开启一个线程池
  • 面向对象:使用类和对象进行代码设计和编程
  • 抽象工厂:采用抽象工厂模式,将数据API和数据库访问对象(DAO)进行解耦
项目结构
├── client        # 前端代码目录
│   ├── public    # 静态资源目录
│   ├── src       # 页面组件目录
│   ├── package.json
│   └── ...
├── server        # 后端代码目录
│   ├── index.js  # 服务启动入口
│   ├── router.js # 路由配置
│   ├── dao       # 数据库访问层
│   ├── service   # 业务逻辑层
│   ├── util      # 工具包
│   ├── package.json
│   └── ...
├── db            # 数据库目录
├── package.json
├── architecture.png # 系统架构图
└── README.md
代码片段

以下是查询日出日落时间的API示例代码:

```javascript
// API endpoint
app.get('/api/sunrise-sunset', async (req, res, next) => {
  const { city } = req.query;
  try {
    const sunriseSunsetData = await SunService.getSunriseSunsetTime(city);
    return res.json(sunriseSunsetData);
  } catch (e) {
    next(e);
  }
});

// Service
class SunService {
  static async getSunriseSunsetTime(city) {
    const data = await APIService.get({
      url: 'https://api.sunrise-sunset.org/json',
      params: {
        q: city,
      },
    });
    return data.results;
  }
}

// API service
class APIService {
  static async get({ url, params = {} }) {
    const queryString = Object.entries(params)
      .map(([key, value]) => `${encodeURIComponent(key)}=${encodeURIComponent(value)}`)
      .join('&');
    const apiUrl = `${url}?${queryString}`;
    const response = await fetch(apiUrl);
    return await response.json();
  }
}


以上是本项目的介绍,希望对程序员们有所帮助。