基于Vue2.0实现简易豆瓣电影webApp
1.运行项目
clone项目到本地,进入项目文件夹,安装依赖
javascript
git clone https://github.com/superman66/vue2.x-douban.git
cd vue2.x-douban
npm install
然后运行项目
javascript
npm run dev
接着运行 node,启动服务,
注意:这一步的 node 转发服务一定要启动,要不然无法正常访问豆瓣 API
```javascript
cd node-proxy
node index.js
//启动成功后,将看到输出 // HTTP Server is running in http://127.0.0.1:8081 ```
最后打开浏览器,输入
localhost:8880
即可访问。效果图如下:
如果遇到本地运行时,豆瓣的图片部分不可见,请参见该 issue: 为什么图片加载会有问题?
戳我查看 demo
注意:由于heroku在国外,而且我用的是免费版,当长时间没有连接的话,node服务会被休眠。如果处于休眠状态下,用户访问速度会比较慢,还有可能出现接口请求出现错误。遇到这种情况,刷新重试即可。
2.路由
应用包括下面4个路由
*
/movies
首页,包含正在上映榜单和即将上映榜单的电影信息,首页只显示各个榜单的前8条数据;
*
/movie-list
榜单列表页面,显示榜单列表信息;
*
/movie/subject/:id
电影详情页面;
*
/movie/search
电影搜索列表页面。
3.项目结构
javascript
.
├── README.md
├── build // vue-cli 自带的配置文件
│ ├── build.js
│ ├── check-versions.js
│ ├── dev-client.js
│ ├── dev-server.js
│ ├── utils.js
│ ├── webpack.base.conf.js
│ ├── webpack.dev.conf.js
│ └── webpack.prod.conf.js
├── config // vue-cli 自带的配置文件
│ ├── dev.env.js
│ ├── index.js
│ └── prod.env.js
├── git.sh
├── index.html
├── node-proxy // node 转发API请求,解决跨域问题
│ └── index.js
├── package.json
├── src
│ ├── App.vue
│ ├── assets
│ │ ├── list.scss
│ │ ├── logo.png
│ │ ├── search-btn.png
│ │ └── style.scss
│ ├── components
│ │ ├── Hello.vue
│ │ ├── Spinner.vue
│ │ └── header.vue
│ ├── main.js // 入口文件
│ ├── router.js // 路由
│ ├── store
│ │ ├── api.js // 抽取访问api的方法
│ │ ├── modules
│ │ │ └── movie.js
│ │ ├── store.js
│ │ └── types.js
│ └── views
│ ├── index.vue
│ ├── movie
│ │ ├── movie-detail.vue
│ │ ├── movie-list.vue
│ │ ├── movies.vue
│ │ └── search-list.vue
│ └── vuex-demo.vue
├── static
└── tree.md
4.第三方库
- HTTP库采用了 axios 。
- 列表下拉加载更多数据使用了 vue-infinite-scroll
5.豆瓣API
该应用使用了下面4个api:
*
/v2/movie/search?q={text}
电影搜索api;
*
/v2/movie/in_theaters
正在上映的电影;
*
/v2/movie/coming_soon
即将上映的电影;
*
/v2/movie/subject/:id
单个电影条目信息。
更多关于豆瓣的api可以前往 豆瓣api官网 查看。
需要注意的是,由于豆瓣api的跨域问题,并不能直接通过ajax请求访问。不过vue-cli提供了代理的配置。
我们需要在
/config/index.js
中配置代理:
javascript
dev: {
env: require('./dev.env'),
port: 8880,
assetsSubDirectory: 'static',
assetsPublicPath: '/',
proxyTable: {
'/api': {
target: 'http://api.douban.com/v2',
changeOrigin: true,
pathRewrite: {
'^/api': ''
}
}
},
cssSourceMap: false
}
在
proxyTable
这个属性中,配置target属性为我们要代理的目标地址。这里我们写成
http://api.douban.com/v2
,这样我们就可以在应用中调用
/api/movie/in_theaters
来访问
http://api.douban.com/v2/movie/in_theaters
,从而解决跨域的问题。
关于vue-cli更多关于跨域的设置可以看 官网文档
Node.js 转发API请求
由于有同学在问,项目执行
npm run build
打包之后,豆瓣 API 代理配置不起作用,无法访问豆瓣API的问题。
所以新增了Node.js http服务,用于转发API请求,解决跨域问题。
安装依赖
Node.js转发用到了
express
和
superagent
.
superanget
是一个 Node.js HTTP client。
npm i express superagent -S
定义接口 根据前端所需,定义了如下三个接口: ```javascript app.get('/movie/:type', function (req, res) { var sreq = request.get(HOST + req.originalUrl) sreq.pipe(res); sreq.on('end', function (error, res) { console.log('end'); }); })
app.get('/movie/subject/:id', function (req, res) { var sreq = request.get(HOST + req.originalUrl) sreq.pipe(res); sreq.on('end', function (error, res) { console.log('end'); }); })
app.get('/movie/search', function (req, res) { var sreq = request.get(HOST + req.originalUrl) sreq.pipe(res); sreq.on('end', function (error, res) { console.log('end'); }); }) ```
CORS设置
跨源资源共享 ( CORS )机制让Web应用服务器能支持跨站访问控制,从而使得安全地进行跨站数据传输成为可能。
主要是通过设置
Access-Control-Allow-Origin: *
javascript
app.all('*', function (req, res, next) {
if (!req.get('Origin')) return next();
// use "*" here to accept any origin
res.set('Access-Control-Allow-Origin', '*');
res.set('Access-Control-Allow-Methods', 'GET');
res.set('Access-Control-Allow-Headers', 'X-Requested-With, Content-Type');
// res.set('Access-Control-Allow-Max-Age', 3600);
if ('OPTIONS' == req.method) return res.send(200);
next();
});
端口监听
javascript
app.listen(8081, function () {
console.log('HTTP Server is running in http://127.0.0.1:8081')
})
启动
cd node-proxy
node index.js
具体见
node-proxy/index.js
更多关于 Node.js 转发 api 请求,请戳完整项目: node-proxy-api
6.关于vuex
如果你想了解vuex的用法,可以切换到
vuex
分支,在该分支下,所有的state都采用vuex来管理。
参考文献
- 基于Web的远程教学系统的研究(中国农业大学·王新伟)
- 基于内容与协同过滤算法的电影推荐系统研究(黑龙江大学·潘悦)
- 基于内容与协同过滤算法的电影推荐系统研究(黑龙江大学·潘悦)
- 基于内容与协同过滤算法的电影推荐系统研究(黑龙江大学·潘悦)
- 基于J2EE规范的通用型整合框架的研究与应用——以亚信科技(中国)大型商业项目中国移动BOSS系统开发为例(上海师范大学·王林强)
- 基于网络爬虫的电影集成搜索系统设计与实现(江西农业大学·江沛)
- 基于J2EE和MVC模式的Web应用研究(武汉理工大学·刘继华)
- 基于SSH框架的博客用户分享平台的设计与实现(河北工业大学·刘磊)
- 基于Web的远程教学系统的研究(中国农业大学·王新伟)
- 基于SSH架构的个人空间交友网站的设计与实现(北京邮电大学·隋昕航)
- 基于Web的信息发布与信息交流平台的设计与实现(吉林大学·许昭霞)
- 基于J2EE和MVC模式的Web应用研究(武汉理工大学·刘继华)
- 基于PhoneGap的移动端SNS平台研建(北京林业大学·陈旭)
- 下一站明星成长平台webapp的设计与实现(北京交通大学·肖云龙)
- 基于J2EE规范的通用型整合框架的研究与应用——以亚信科技(中国)大型商业项目中国移动BOSS系统开发为例(上海师范大学·王林强)
本文内容包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主题。发布者:代码工坊 ,原文地址:https://m.bishedaima.com/yuanma/35648.html