{"id":27704447,"url":"https://github.com/monkeyWangs/doubanMovie","last_synced_at":"2025-04-26T01:01:58.621Z","repository":{"id":95280220,"uuid":"84931059","full_name":"muwoo/doubanMovie","owner":"muwoo","description":"Vue豆瓣电影浏览器端渲染","archived":false,"fork":false,"pushed_at":"2017-09-11T09:54:12.000Z","size":17918,"stargazers_count":403,"open_issues_count":5,"forks_count":151,"subscribers_count":22,"default_branch":"master","last_synced_at":"2025-04-22T09:03:22.511Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Vue","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/muwoo.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-03-14T09:35:34.000Z","updated_at":"2025-02-15T21:24:10.000Z","dependencies_parsed_at":"2023-04-11T11:17:27.376Z","dependency_job_id":null,"html_url":"https://github.com/muwoo/doubanMovie","commit_stats":null,"previous_names":["monkeywangs/doubanmovie"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/muwoo%2FdoubanMovie","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/muwoo%2FdoubanMovie/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/muwoo%2FdoubanMovie/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/muwoo%2FdoubanMovie/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/muwoo","download_url":"https://codeload.github.com/muwoo/doubanMovie/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":250917360,"owners_count":21507562,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-04-26T01:01:54.228Z","updated_at":"2025-04-26T01:01:58.577Z","avatar_url":"https://github.com/muwoo.png","language":"Vue","readme":"# 豆瓣电影简单展示\n\u003e this is doubanMovie show By vue2.0\n# 演示地址\n[豆瓣电影](http://139.199.163.228:8081/)\n服务器欠费了，没有继续续费了，想要看效果的小伙伴可以fork下来在本地run dev 一下。\n## 安装步骤\n``` bash\n# install dependencies\nnpm install\n\n# serve with hot reload at localhost:8080\nnpm run dev\n\n# build for production with minification\nnpm run build\n\n# build for production and view the bundle analyzer report\nnpm run build --report\n```\n\n### 使用技术简介 （vue2.x + webpack2.x + vue-resource + vue-router + vuex + Element-UI）\n### 项目简单演示\n![img](https://github.com/monkeyWangs/doubanMovie/blob/master/images/douban.gif)\n\n# 教程  \n\n\n## 安装 vue-cli 脚手架  \n\n\n运行如下命令，即可创建一个名为 doubanMovie 的 vue 项目，并且通过本地 8080 端口启动服务   \n    \n``` bash\nnpm install -g vue-cli\nvue init webpack doubanMovie\ncd doubanMovie\nnpm install\nnpm run dev\n```\n\n\n在运行 `vue init webpack doubanMovie` 后，会依次要求输入以下配置内容  \n- 项目名称\n- 项目描述\n- 作者\n- 选择 Vue 构建：运行+编译 或 仅运行时\n- 是否安装 vue-loader\n- 是否使用 ESLint\n    - 如果是，请选择模式：标准模式、AirBNB 模式、自定义\n- 是否使用 Karma + Mocha 的单元测试\n- 是否使用 Nightwatch e2e 测试  \n\n\n\n安装完成后，即可看到以下文件结构：\n\n```\n.\n|-- build                            // 项目构建相关代码\n|   |-- build.js                     // 生产环境构建代码\n|   |-- check-version.js             // 检查 node、npm 等版本\n|   |-- dev-client.js                // 热重载相关\n|   |-- dev-server.js                // 构建本地服务器\n|   |-- utils.js                     // 构建工具相关\n|   |-- webpack.base.conf.js         // webpack 基础配置（出入口和 loader）\n|   |-- webpack.dev.conf.js          // webpack 开发环境配置\n|   |-- webpack.prod.conf.js         // webpack 生产环境配置\n|-- config                           // 项目开发环境配置\n|   |-- dev.env.js                   // 开发环境变量\n|   |-- index.js                     // 项目一些配置变量（开发环境接口转发将在此配置）\n|   |-- prod.env.js                  // 生产环境变量\n|   |-- test.env.js                  // 测试环境变量\n|-- src                              // 源码目录\n|   |-- components                   // vue 公共组件\n|   |-- App.vue                      // 页面入口文件\n|   |-- main.js                      // 程序入口文件，加载各种公共组件\n|-- static                           // 静态文件，比如一些图片，json数据等\n|-- test                             // 自动化测试相关文件\n|-- .babelrc                         // ES6语法编译配置\n|-- .editorconfig                    // 定义代码格式\n|-- .eslintignore                    // ESLint 检查忽略的文件\n|-- .eslistrc.js                     // ESLint 文件，如需更改规则则在此文件添加\n|-- .gitignore                       // git 上传需要忽略的文件\n|-- README.md                        // 项目说明\n|-- index.html                       // 入口页面\n|-- package.json                     // 项目基本信息\n.\n```\n\n## ESLint 配置  \n\nESLint 配置在根目录的 `.eslintrc.js` 里。  \n正常情况下，ESLint 报错是因为你的代码不符合现有的 ESLint 规范。当然在开发的过程中，ESlint能够很好地规范你的代码，对于新手来说可能有点别扭，但是习惯了可以极大地提升代码的可读性。\n\n## 静态页面开发  \n\n此时，浏览器应该已经打开了 localhost:8080 页面。  \n\n在此情况下，请尝试更改 `/src/App.vue` 和 `/src/components/Hello.vue` 文件中`\u003ctemplate\u003e`标签内的内容，保存后即可立即看到浏览器页面已自动更新了你做出的改动。  这是因为我们配置了vue的热更新组件。在`build`目录的`dev-client.js`\n```javascript\n/* eslint-disable */\nrequire('eventsource-polyfill')\nvar hotClient = require('webpack-hot-middleware/client?noInfo=true\u0026reload=true')\n\nhotClient.subscribe(function (event) {\n  if (event.action === 'reload') {\n    window.location.reload()\n  }\n})\n```\n\n提示：`./src/components` 文件夹多用于保存公用组件。至于页面组件.\n\n## Element-ui \n使用本项目使用的是Element-ui做为公共组件库，element-ui是由饿了么开源的基于vue2.0的组件库。具体可以参考官网[element-ui](http://element.eleme.io/#/zh-CN/component/installation)\n## vue-router 2 使用\n\n当一个个静态组件完成后，需要按照路由组织这些组件文件。  \n\n请前往 [vue-router 2 介绍](https://router.vuejs.org/zh-cn/) 阅读 __基础__ 部分教程，并可以边阅读边配置路由。  \n\n路由文件是 `./src/router.index.js` 。  \n\n本项目中使用了 [HTML5 History 模式](https://router.vuejs.org/zh-cn/essentials/history-mode.html)，路由配置比较简单，可以参考。  \n\n\n## API 请求转发配置\n\n至此，你应该已经完成了所有的静态页面的工作，接下来我们准备搭建请求，为后面的 xhr 请求做好准备。  \n\n1. 打开 `http://api.douban.com/v2/movie/in_theaters` 查看接口数据，留意此地址。  \n\n2. 在 `./config/index.js` 中的 `proxyTable` 配置代理：  \n\n    ```js \n    proxyTable: {\n        '/api': {\n            target: 'http://api.douban.com/v2',\n            changeOrigin: true,\n            pathRewrite: {\n                '^/api': ''\n            }\n        }\n    }\n    ```  \n\n3. 重新启动 `npm run dev`，打开 `localhost:8080/api/movie/in_theaters` 查看结果是否与直接请求豆瓣 API 相同。  \n\n4. 本应该使用了以下 API：  \n    - `/v2/movie/search?q={text}` 电影搜索api；  \n    - `/v2/movie/in_theaters` 正在上映的电影；  \n    - `/v2/movie/coming_soon` 即将上映的电影；  \n    - `/v2/movie/subject/:id` 单个电影条目信息。  \n\n\u003e 更多请参考 [豆瓣电影 API](https://developers.douban.com/wiki) 文档。    \n\n这样我们就可以在应用中调用 `/api/movie/in_theaters` 来访问 `http://api.douban.com/v2/movie/in_theaters`，从而解决跨域的问题。\n## build生产环境服务跨域方案\n以nginx作为简单的描述：找到nginx的配置文件config/nginx.config;用下面代码替换这个文件里面的代码\n```shell\n#\n# The default server\n#\n\nserver {\n    listen       80;\n\n    # 需要将主机名改为豆瓣 api\n    server_name  api.douban.com;\n\n    # root 即指向服务器存放的编译出的 index.html 目录\n    root         /var/www/Vdo/dist;\n\n    # 设定根路由\n    location / {\n\n        # 指定 index 文件\n        index index.html;\n\n        # 将其他任何路由都交给 index.html 处理，保证能使用 HTML5 History 模式\n        # REF https://router.vuejs.org/zh-cn/essentials/history-mode.html#nginx\n        try_files $uri $uri/ /index.html;\n    }\n\n    # 设定转发豆瓣 api，即 localhost/api/XXX -\u003e api.douban.com/v2/XXX\n    location /api/ {\n\n        # 设定头部\n        proxy_set_header Host api.douban.com;\n\n        # 设定代理目标\n        proxy_pass http://api.douban.com/v2/;\n    }\n    error_page 404 /404.html;\n        location = /40x.html {\n    }\n\n    error_page 500 502 503 504 /50x.html;\n        location = /50x.html {\n    }\n\n}\n```\n保存启动ngix便可以了\n\n## 使用 vue-resource \n\nvue-resource 库使用起来相当方便。  \n\n你可以在单个组件中尝试引入并调用：  \n```javascript\nimport Vue from 'vue'\nimport $http from 'vue-resource'\nVue.use($http)\n\nlet vm = new Vue()\n\nconst configPath = '/api'\nwindow.configPath = configPath\n\nexport class Utils {\n  get (url, data = {}) {\n    url = configPath + url\n    return new Promise((resolve, reject) =\u003e {\n      vm.$http.get(url, {params: data, credentials: true}).then((response) =\u003e {\n        resolve(response.body)\n      }, function () {\n        console.log('接口异常')\n      })\n    })\n  }\n}\n```\n这里，只使用了里面的get方法\n\u003e 更多 vue-resource 用法请参考 [vue-resource](https://github.com/pagekit/vue-resource)\n\n## 使用 Vuex 并分离代码  \n\n为了试代码更加结构化，我们应当将数据请求和视图分离。  \n\n这一节中，我们有两个任务要做：  \n\n1. 分离数据请求层逻辑。  \n2. 使用 Vuex 管理状态。   \n\n将二者放到同一节中主要是因为二者再同一目录下，我们来查看 `./store` 文件夹的结构：\n```\n.\n|-- store                          // 数据处理根目录\n|   |-- moving                     // 电影模块文件夹\n|   |   |-- actions.js             // 电影模块获取接口actions\n|   |   |-- getters.js             // Vuex getters\n|   |   |-- index.js               // 定义store 模块入口文件\n|   |   |-- mutations.js           // Vuex mutations\n|   |   |-- type.js                // Vuex 操作 key\n|   |-- index.js                   // Vuex 入口\n.\n```\n\n我们需要先了解 Vuex。  \n\n请查看 [Vuex 文档](https://vuex.vuejs.org/zh-cn/)，了解其 **核心概念**。  \n\n\u003eVuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态，并以相应的规则保证状态以一种可预测的方式发生变化。Vuex 也集成到 Vue 的官方调试工具 devtools extension，提供了诸如零配置的 time-travel 调试、状态快照导入导出等高级调试功能。  \n\n其实在我看来，Vuex 相当于某种意义上设置了读写权限的全局变量，将数据保存保存到该“全局变量”下，并通过一定的方法去读写数据。（希望这能帮助你理解 Vuex）\n\n\n# 结语  \n\n至此，主体工作已经完成。  \n\n欢迎 Star 本项目。\n\n","funding_links":[],"categories":["Demo示例"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FmonkeyWangs%2FdoubanMovie","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FmonkeyWangs%2FdoubanMovie","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FmonkeyWangs%2FdoubanMovie/lists"}