Skip to content

KKKA404/SOA-web

Repository files navigation

travel_platform

SOA-WebApi项目——易旅

开发环境

-Vue版本:V2.9.6 -Axios版本:0.21.2

-Element-ui

-编程语言:Javascript(NodeJs)、CSS、HTML

本项目采用脚手架创建vue2项目,并通过-Axios网络请求库调用各类接口获得数据。


部署说明

在项目根路径下打开控制台,首先运行npm install下载所需依赖包,完成后运行npm run dev运行项目。项目默认部署在localhost的8080端口上。


简介

本项目为旅游出行的信息整合网站,功能包括旅游推荐视频推送近期旅游资讯景点简介出行攻略视频百度地图相关景点查看当地疫情风险区精选壁纸以及相关商品列表。通过跨域代理用axios访问各方API,达到景点信息整合的效果,方便出行。


基础设计

跨域代理

在config/index.js下利用代理,避免访问外部api时出现跨域问题。使用示例如下

proxyTable: {
      '/proxyApi': {
        target: 'http://api.bilibili.cn',
        changeOrigin: true,
        pathRewrite: {
          '^/proxyApi': '/'
        }
      },
      '/baiduApi': {                               // 要代理的接口名
        target: 'https://api.wer.plus/api',        // 要代理的接口地址
        changeOrigin: true,                        // 允许跨域
        pathRewrite: { '^/baiduApi': '/' }         // 接口名重写
      },
}

api函数封装

在src文件夹下新建api文件夹,在其中存放封装的api函数,便于页面调用。比如调用bilibili的搜索api,将其封装为函数如下:

src/api/search.js

import axios from 'axios'

export function getResultList(keyword, page, pagesize) {
  const url = '/proxyApi/x/web-interface/search/all/v2'
  const data = {
    keyword,
    page,
    pagesize
  }

  return axios.get(url, {
    params: data
  }).then(res => {
    return Promise.resolve(res)
  })
}

注:此处的/proxyApi/即为上面跨域代理模块中(http://api.bilibili.cn)的重写


页面设计

首页

![](file://C:\Users\Dell\AppData\Roaming\marktext\images\2022-10-20-23-07-27-(09HRKAAZ{%N][email protected]?msec=1678028939060)

首页内容包括两部分:风景轮播图,bilibili的旅游推荐视频。其中b站视频调用如下:

created() {
        getResultList('旅游推荐', 1, 20).then(res => {
            this.searchResultsList = res.data.data.result[10].data
            console.log(this.searchResultsList)
        });
    }

参数'旅游推荐'、1、20分别为b站检索词,第一页,20条内容,接口返回数据包括结果视频的封面、标题、简介以及视频链接


头部导航

在网站上方是头部导航,我将其设为了其他页面的父路由,以便点击跳转:

routes: [
    { path: '/', redirect: '/header/main' },
    {
      path: '/header', name: 'header', component: header, children: [
        { path: '/header/main', name: 'main', component: main },
        { path: '/header/message', name: 'message', component: message },
        { path: '/header/allinfo', name: 'allinfo', component: allinfo },
      ]
    }
  ]

头部导航的搜索栏即用于网站检索关键词,输入内容后点击搜索Button,路由会跳转至景点信息页面,并把输入的字符数据传递给景点信息页面,再以此为关键词调用各个api、显示各方面的搜索结果。其中路由跳转后会执行一次全局刷新,以实现数据更新和显示。

TurnPage: function () {
            this.$router.push({
                path: "/header/allinfo",
                query: {
                    inputContent: this.inputContent
                }
            });
            this.$router.go(0);
        },

另外同页面跳转问题可在router/index.js内加入如下代码解决

//获取原型对象上的push函数
const originalPush = Router.prototype.push
//修改原型对象中的push方法
Router.prototype.push = function push(location) {
  return originalPush.call(this, location).catch(err => err)
}

近期旅游资讯

近期资讯不需要提供关键词,接口为天行数据‘http://api.tianapi.com/travel/index’,params要求key(秘钥)和num(返回条数),返回为num条资讯的封面、标题、简介、url链接等。


景点信息

景点信息由多个子模块集合而成,数据传输原理为:景点信息页面将从头部导航获得到的关键词继承给自身的多个子Vue文件,各个子Vue文件在内部再根据关键词调用api,呈现结果。子Vue继承keyword(关键词)数据方式如下:

props: {
        keyword: {
            type: String,
            default: function () {
                return [];
            },
        },
    },

——百度百科api以及b站搜索的api,百科所需参数为输入关键词,返回简介词条,b站api参 数为输入关键词,num,page,其余同前面介绍的b站搜索一致

——百度地图api:需要申请百度地图的key并传参

——必应api接口:注册开发用户后得到请求头密钥。此处调用的是必应的图片搜索,params要求关键词和使用市场,返回为图片及url链接等。

——相关景点:根据关键词模糊搜索相关景点,返回景点名,所在地

——当地风险区:根据上述相关景点得到的所在地,返回该地点的中高风险区数量即列表

——唯品会:根据关键词调用唯品会检索,返回商品条目,包括链接、标题、封面、价格等

Build Setup

# install dependencies
npm install

# serve with hot reload at localhost:8080
npm run dev

# build for production with minification
npm run build

# build for production and view the bundle analyzer report
npm run build --report

# run e2e tests
npm run e2e

# run all tests
npm test

For a detailed explanation on how things work, check out the guide and docs for vue-loader.

About

SOA webAPI开发作业

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published