├── LICENSE
├── README.md
├── book_service
├── .idea
│ ├── book_service.iml
│ ├── misc.xml
│ ├── modules.xml
│ └── workspace.xml
├── app.js
├── bin
│ └── www
├── common
│ └── db.js
├── models
│ ├── article.js
│ ├── comment.js
│ ├── mail.js
│ ├── movie.js
│ ├── recommend.js
│ └── user.js
├── package-lock.json
├── package.json
├── public
│ └── stylesheets
│ │ └── style.css
├── routes
│ ├── admin.js
│ ├── index.js
│ └── users.js
└── views
│ ├── error.jade
│ ├── index.jade
│ └── layout.jade
├── book_view
├── .babelrc
├── .editorconfig
├── .eslintignore
├── .eslintrc.js
├── .gitignore
├── .postcssrc.js
├── README.md
├── build
│ ├── build.js
│ ├── check-versions.js
│ ├── logo.png
│ ├── utils.js
│ ├── vue-loader.conf.js
│ ├── webpack.base.conf.js
│ ├── webpack.dev.conf.js
│ └── webpack.prod.conf.js
├── config
│ ├── dev.env.js
│ ├── index.js
│ ├── prod.env.js
│ └── test.env.js
├── index.html
├── package-lock.json
├── package.json
├── src
│ ├── App.vue
│ ├── assets
│ │ └── logo.png
│ ├── components
│ │ ├── AdminMenu.vue
│ │ ├── Comment.vue
│ │ ├── CommonFooter.vue
│ │ ├── HelloWorld.vue
│ │ ├── IndexHeaderPic.vue
│ │ ├── MovieIndexHeader.vue
│ │ ├── MoviesList.vue
│ │ ├── NewsList.vue
│ │ ├── UserInfo.vue
│ │ └── UserMessage.vue
│ ├── main.js
│ ├── pages
│ │ ├── admin.vue
│ │ ├── adminAddArticle.vue
│ │ ├── adminAddMovie.vue
│ │ ├── adminArticleList.vue
│ │ ├── adminCommentList.vue
│ │ ├── adminMovieList.vue
│ │ ├── adminUserList.vue
│ │ ├── forgetPassword.vue
│ │ ├── index.vue
│ │ ├── loginPage.vue
│ │ ├── movieDetail.vue
│ │ ├── moviesList.vue
│ │ ├── newsDetail.vue
│ │ ├── newsList.vue
│ │ ├── registerPage.vue
│ │ └── userInfo.vue
│ └── router
│ │ └── index.js
├── static
│ └── .gitkeep
└── test
│ ├── e2e
│ ├── custom-assertions
│ │ └── elementCount.js
│ ├── nightwatch.conf.js
│ ├── runner.js
│ └── specs
│ │ └── test.js
│ └── unit
│ ├── .eslintrc
│ ├── jest.conf.js
│ ├── setup.js
│ └── specs
│ └── HelloWorld.spec.js
├── database
├── json
│ ├── articles.json
│ ├── comments.json
│ ├── mails.json
│ ├── movies.json
│ ├── recommends.json
│ └── users.json
└── sql
│ ├── movieServer.articles.sql
│ ├── movieServer.comments.sql
│ ├── movieServer.mails.sql
│ ├── movieServer.movies.sql
│ ├── movieServer.recommends.sql
│ └── movieServer.users.sql
└── screenshot
├── 1.首页.png
├── 10.添加电影页面.png
├── 11.影评管理页面.png
├── 12.添加影评页面.png
├── 13.评论管理页面.png
├── 14.用户管理页面.png
├── 2.注册页面.png
├── 3.登录页面.png
├── 4.电影列表页面.png
├── 5.影评列表页面.png
├── 6.电影详情页面.png
├── 7.影评详情页面.png
├── 8.后台管理主页面.png
└── 9.电影管理页面.png
/README.md:
--------------------------------------------------------------------------------
1 | # VueMovieWebsite
2 | 使用 Vue + Node.js + Express + MongoDB + iView 实现的一个电影社区网站。由于时间有限,一些细节可能不够完善。
3 |
4 | 更多相关内容可参考我的博客:[Vue.js学习笔记](https://blog.csdn.net/weixin_42762089/article/details/91492148#Vue.js%E7%94%B5%E5%BD%B1%E7%BD%91%E7%AB%99%E9%A1%B9%E7%9B%AE)
5 |
6 | ## 安装
7 |
8 | 此项目分为服务端和前端,服务端代码在 `book_service` 文件夹中,前端代码在 `book_view` 文件夹中,数据库文件在 `database` 文件夹中(分为 json 和 sql 两种格式)
9 |
10 | 1. 先下载源代码,并且安装 `Node.js`
11 |
12 | 2. 安装模块:命令行环境进入`book_service` 文件夹,执行 `npm instll`,同样进入`book_view` 文件夹,执行 `npm instll`
13 |
14 | 3. 启动服务:命令行环境进入`book_service` 文件夹,执行 `npm start`,同样进入`book_view` 文件夹,执行 `npm start`
15 |
16 | 4. 在浏览器中打开网址即可: http://localhost:8080
17 |
18 | ## 1.技术选择
19 |
20 | 数据库:[MongoDB](https://www.mongodb.com/)(一个介于关系数据库和非关系数据库之间的产品)
21 |
22 | 服务器端:[JavaScript](https://www.liaoxuefeng.com/wiki/1022910821149312) + [Node.js](http://nodejs.cn/) + [Express框架](http://www.expressjs.com.cn/)
23 |
24 | 前端:[Vue.js框架](https://cn.vuejs.org/index.html)
25 |
26 | UI库:[iView](https://www.iviewui.com/)
27 |
28 | ## 2.开发环境
29 |
30 | IDE:WebStorm
31 |
32 | MongoDB可视化界面软件:Studio 3T
33 |
34 | 服务器测试:Postman客户端
35 |
36 | ## 3.主要功能
37 |
38 | * 前台
39 |
40 | 1. 用户的注册、登录、忘记密码、个人资料显示
41 |
42 | 2. 主页显示电影推荐及影评推荐
43 |
44 | 3. 电影详细信息页面:显示电影名称、上映日期、预告片地址、观看次数、点赞次数、观看地址、已审核的用户评论
45 |
46 | 4. 影评详细信息页面:显示影评标题、发布日期、影评内容、已审核的用户评论
47 |
48 | 5. 用户对电影的浏览、评论、点赞、跳转到观看网址
49 |
50 | 6. 用户对影评的浏览、评论
51 |
52 | * 后台
53 |
54 | 1. 电影管理: 查询所有电影、添加电影、删除电影、修改电影信息、更新主页的推荐电影
55 |
56 | 2. 影评管理:查询所有影评、添加影评、删除影评、修改影评信息、更新主页的推荐影评
57 |
58 | 3. 评论管理:查询所有用户评论、删除用户评论、审核用户评论
59 |
60 | 4. 用户管理:查询所有用户、删除用户、封停/解封用户、修改用户身份(用户/管理员)、修改用户权限(0-普通用户,1-普通管理员,2-超级管理员,数字越大权限越高)
61 |
62 | ## 4.数据库描述
63 |
64 | 数据库主要有6张表:
65 |
66 | 1. articles 影评表
67 |
68 | 2. comments 用户评论表
69 |
70 | 3. movies 电影表
71 |
72 | 4. recommends 主页显示大图的电影表
73 |
74 | 5. users 用户表
75 |
76 | 6. mails 站内信表(时间有限,此功能前台部分未实现)
77 |
78 | ## 5.项目截图
79 |
80 | 
81 |
82 | 
83 |
84 | 
85 |
86 | 
87 |
88 | 
89 |
90 | 
91 |
92 | 
93 |
94 | 
95 |
96 | 
97 |
98 | 
99 |
100 | 
101 |
102 | 
103 |
104 | 
105 |
106 | 
107 |
--------------------------------------------------------------------------------
/book_service/.idea/book_service.iml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/book_service/.idea/misc.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/book_service/.idea/modules.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/book_service/app.js:
--------------------------------------------------------------------------------
1 | var createError = require('http-errors');
2 | var express = require('express');
3 | var path = require('path');
4 | var cookieParser = require('cookie-parser');
5 | var logger = require('morgan');
6 |
7 | var indexRouter = require('./routes/index');
8 | var usersRouter = require('./routes/users');
9 | var adminRouter = require('./routes/admin');
10 |
11 | var app = express();
12 |
13 |
14 |
15 | // view engine setup
16 | app.set('views', path.join(__dirname, 'views'));
17 | app.set('view engine', 'jade');
18 |
19 | app.use(logger('dev'));
20 | app.use(express.json());
21 | app.use(express.urlencoded({ extended: false }));
22 | app.use(cookieParser());
23 | app.use(express.static(path.join(__dirname, 'public')));
24 |
25 | // 全路由的配置,跨域代码:
26 | app.all('*', function (req, res, next) {
27 | res.header('Access-Control-Allow-Origin', '*');
28 | res.header('Access-Control-Allow-Headers', 'Content-Type, Content-length, Authorization, Accept, X-Requested-With, yourHeaderFeild');
29 | res.header('Access-Control-Allow-Methods', 'PUT, POST, GET, DELETE, OPTIONS');
30 | if(req.method == 'OPTIONS')
31 | res.send(200);
32 | else
33 | next();
34 | });
35 |
36 | app.use('/', indexRouter);
37 | app.use('/users', usersRouter);
38 | app.use('/admin', adminRouter);
39 |
40 | // catch 404 and forward to error handler
41 | app.use(function(req, res, next) {
42 | next(createError(404));
43 | });
44 |
45 | // error handler
46 | app.use(function(err, req, res, next) {
47 | // set locals, only providing error in development
48 | res.locals.message = err.message;
49 | res.locals.error = req.app.get('env') === 'development' ? err : {};
50 |
51 | // render the error page
52 | res.status(err.status || 500);
53 | res.render('error');
54 | });
55 |
56 | module.exports = app;
57 |
--------------------------------------------------------------------------------
/book_service/bin/www:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env node
2 |
3 | /**
4 | * Module dependencies.
5 | */
6 |
7 | var app = require('../app');
8 | var debug = require('debug')('book-service:server');
9 | var http = require('http');
10 |
11 | /**
12 | * Get port from environment and store in Express.
13 | */
14 |
15 | var port = normalizePort(process.env.PORT || '3000');
16 | app.set('port', port);
17 |
18 | /**
19 | * Create HTTP server.
20 | */
21 |
22 | var server = http.createServer(app);
23 |
24 | /**
25 | * Listen on provided port, on all network interfaces.
26 | */
27 |
28 | server.listen(port);
29 | server.on('error', onError);
30 | server.on('listening', onListening);
31 |
32 | /**
33 | * Normalize a port into a number, string, or false.
34 | */
35 |
36 | function normalizePort(val) {
37 | var port = parseInt(val, 10);
38 |
39 | if (isNaN(port)) {
40 | // named pipe
41 | return val;
42 | }
43 |
44 | if (port >= 0) {
45 | // port number
46 | return port;
47 | }
48 |
49 | return false;
50 | }
51 |
52 | /**
53 | * Event listener for HTTP server "error" event.
54 | */
55 |
56 | function onError(error) {
57 | if (error.syscall !== 'listen') {
58 | throw error;
59 | }
60 |
61 | var bind = typeof port === 'string'
62 | ? 'Pipe ' + port
63 | : 'Port ' + port;
64 |
65 | // handle specific listen errors with friendly messages
66 | switch (error.code) {
67 | case 'EACCES':
68 | console.error(bind + ' requires elevated privileges');
69 | process.exit(1);
70 | break;
71 | case 'EADDRINUSE':
72 | console.error(bind + ' is already in use');
73 | process.exit(1);
74 | break;
75 | default:
76 | throw error;
77 | }
78 | }
79 |
80 | /**
81 | * Event listener for HTTP server "listening" event.
82 | */
83 |
84 | function onListening() {
85 | var addr = server.address();
86 | var bind = typeof addr === 'string'
87 | ? 'pipe ' + addr
88 | : 'port ' + addr.port;
89 | debug('Listening on ' + bind);
90 | }
91 |
--------------------------------------------------------------------------------
/book_service/common/db.js:
--------------------------------------------------------------------------------
1 | var mongoose = require('mongoose');
2 | var url = 'mongodb://localhost/movieServer';
3 | mongoose.connect(url);
4 |
5 | /* 链接成功 */
6 | mongoose.connection.on('connected', function() {
7 | console.log('Mongoose connection open to ' + url);
8 | });
9 |
10 | // 链接异常
11 | mongoose.connection.on('error', function(err) {
12 | console.log('Mongoose connection error:' + err);
13 | });
14 |
15 | // 链接断开
16 | mongoose.connection.on('disconnected', function() {
17 | console.log('Mongoose connection disconnected');
18 | });
19 |
20 | module.exports = mongoose;
21 |
--------------------------------------------------------------------------------
/book_service/models/article.js:
--------------------------------------------------------------------------------
1 | var mongoose = require('..//common/db');
2 |
3 | // 建立文章的数据集
4 | var article = new mongoose.Schema({
5 | articleTitle: String,
6 | articleContext: String,
7 | articleTime: String,
8 | articleMainPage: Boolean
9 | });
10 |
11 | // 查找所有的文章
12 | article.statics.findAll = function (callBack) {
13 | this.find({}, callBack);
14 | };
15 |
16 | // 根据文章ID查找
17 | article.statics.findByArticleId = function (id, callBack) {
18 | this.find({_id:id}, callBack);
19 | };
20 |
21 | var articleModel = mongoose.model('article', article);
22 |
23 | module.exports = articleModel;
24 |
--------------------------------------------------------------------------------
/book_service/models/comment.js:
--------------------------------------------------------------------------------
1 | var mongoose = require('..//common/db');
2 |
3 | // 建立电影评论数据集
4 | var comment = new mongoose.Schema({
5 | movie_id: String,
6 | username: String,
7 | context: String,
8 | check: Boolean
9 | });
10 |
11 | // 查找所有电影评论
12 | comment.statics.findAll = function (callBack) {
13 | this.find({}, callBack);
14 | };
15 |
16 | // 根据电影ID查找已审核的评论
17 | comment.statics.findByMovieId = function (m_id, callBack) {
18 | this.find({movie_id:m_id, check: true}, callBack);
19 | };
20 |
21 | var commentModel = mongoose.model('comment', comment);
22 |
23 | module.exports = commentModel;
24 |
--------------------------------------------------------------------------------
/book_service/models/mail.js:
--------------------------------------------------------------------------------
1 | var mongoose = require('..//common/db');
2 |
3 | // 建立站内信数据集
4 | var mail = new mongoose.Schema({
5 | fromUser: String,
6 | toUser: String,
7 | title: String,
8 | context: String,
9 | date: String
10 | });
11 |
12 | // 根据收信人ID查找站内信
13 | mail.statics.findByToUserId = function (to_id, callBack) {
14 | this.find({toUser:to_id}, callBack);
15 | };
16 |
17 | // 根据发信人ID查找站内信
18 | mail.statics.findByFromUserId = function (from_id, callBack) {
19 | this.find({fromUser:from_id}, callBack);
20 | };
21 |
22 | var mailModel = mongoose.model('mail', mail);
23 |
24 | module.exports = mailModel;
25 |
--------------------------------------------------------------------------------
/book_service/models/movie.js:
--------------------------------------------------------------------------------
1 | var mongoose = require('..//common/db');
2 |
3 | // 建立电影数据集
4 | var movie = new mongoose.Schema({
5 | movieName: String,
6 | movieImg: String,
7 | movieVideo: String,
8 | movieDownload: String,
9 | movieTime: String,
10 | movieNumSuppose: Number,
11 | movieNumDownload: Number,
12 | movieMainPage: Boolean
13 | });
14 |
15 | // 查找所有电影
16 | movie.statics.findAll = function (callBack) {
17 | this.find({}, callBack);
18 | };
19 |
20 | // 根据电影id查找
21 | movie.statics.findById = function (m_id, callBack) {
22 | this.find({_id:m_id}, callBack);
23 | };
24 |
25 | // 根据电影名查找
26 | movie.statics.findByMovieName = function (m_name, callBack) {
27 | this.find({movieName:m_name}, callBack);
28 | };
29 |
30 | var movieModel = mongoose.model('movie', movie);
31 |
32 | module.exports = movieModel;
33 |
--------------------------------------------------------------------------------
/book_service/models/recommend.js:
--------------------------------------------------------------------------------
1 | var mongoose = require('..//common/db');
2 |
3 | // 建立首页推荐的数据集
4 | var recommend = new mongoose.Schema({
5 | recommendImg: String,
6 | recommendSrc: String,
7 | recommendTitle: String
8 | });
9 |
10 | // 查找所有首页推荐的电影
11 | recommend.statics.findAll = function (callBack) {
12 | this.find({}, callBack);
13 | };
14 |
15 | // 根据电影ID查找首页推荐
16 | recommend.statics.findByIndexId = function (m_id, callBack) {
17 | this.find({findByIndexId:m_id}, callBack);
18 | };
19 |
20 | var recommendModel = mongoose.model('recommend', recommend);
21 |
22 | module.exports = recommendModel;
23 |
--------------------------------------------------------------------------------
/book_service/models/user.js:
--------------------------------------------------------------------------------
1 | var mongoose = require('..//common/db');
2 |
3 | // 建立用户数据集
4 | var user = new mongoose.Schema({
5 | username: String,
6 | password: String,
7 | userMail: String,
8 | userPhone: String,
9 | userAdmin: Boolean,
10 | userPower: Number, // userPower取值范围:0,1,2 0是普通用户没有后台权限,1是管理员1级权限,2是管理员2级权限能做的操作更多(如封停用户,管理用户权限,添加/删除主页推荐图片)
11 | userStop: Boolean
12 | });
13 |
14 | // 查找所有用户
15 | user.statics.findAll = function (callBack) {
16 | this.find({}, callBack);
17 | };
18 |
19 | // 根据用户名查找
20 | user.statics.findByUsername = function (name, callBack) {
21 | this.find({username:name}, callBack);
22 | };
23 |
24 | // 根据用户id查找
25 | user.statics.findByUserId = function (id, callBack) {
26 | this.find({_id:id}, callBack);
27 | };
28 |
29 | // 登录匹配:用户名与密码正确并且没有被封停
30 | user.statics.findUserLogin = function (name, password, callBack) {
31 | this.find({username:name, password:password}, callBack);
32 | };
33 |
34 | // 根据用户名、邮箱、电话找回密码
35 | user.statics.findUserPassword = function (name, mail, phone, callBack) {
36 | this.find({username:name, userMail:mail, userPhone:phone}, callBack);
37 | };
38 |
39 | var userModel = mongoose.model('user', user);
40 | module.exports = userModel;
41 |
--------------------------------------------------------------------------------
/book_service/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "book-service",
3 | "version": "0.0.0",
4 | "private": true,
5 | "scripts": {
6 | "start": "node ./bin/www"
7 | },
8 | "dependencies": {
9 | "cookie-parser": "~1.4.4",
10 | "crypto": "^1.0.1",
11 | "debug": "~2.6.9",
12 | "express": "~4.16.1",
13 | "http-errors": "~1.6.3",
14 | "jade": "~1.11.0",
15 | "mongoose": "^5.6.0",
16 | "morgan": "~1.9.1"
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/book_service/public/stylesheets/style.css:
--------------------------------------------------------------------------------
1 | body {
2 | padding: 50px;
3 | font: 14px "Lucida Grande", Helvetica, Arial, sans-serif;
4 | }
5 |
6 | a {
7 | color: #00B7FF;
8 | }
9 |
--------------------------------------------------------------------------------
/book_service/routes/index.js:
--------------------------------------------------------------------------------
1 | var express = require('express');
2 | var router = express.Router();
3 | var mongoose = require('mongoose');
4 | var recommend = require('../models/recommend');
5 | var movie = require('../models/movie');
6 | var article = require('../models/article');
7 | var user = require('../models/user');
8 |
9 | // 定义路由
10 | /* GET home page. */
11 | router.get('/', function(req, res, next) {
12 | res.render('index', { title: 'Express' });
13 | });
14 |
15 | // 定义路由
16 | router.get('/mongooseTest', function (req, res, next) {
17 | mongoose.connect('mongodb://localhost/pets', {useMongoClient: true});
18 | mongoose.Promise = global.Promise;
19 |
20 | var schema = new mongoose.Schema({name: String});
21 | var Cat = mongoose.model('Cat', schema);
22 |
23 | var tom = new Cat({ name: 'Tom'});
24 | tom.save(function (err) {
25 | if(err)
26 | console.log(err);
27 | else
28 | console.log('success insert');
29 | });
30 | res.send('数据库连接测试。。。');
31 | });
32 |
33 | // 显示主页的推荐大图
34 | router.get('/showIndex', function (req, res, next) {
35 | recommend.findAll(function (err, getRecommend) {
36 | res.json({status: 0 , message: "获取所有主页显示大图的电影", data: getRecommend});
37 | })
38 | });
39 |
40 | // 显示主页的推荐电影
41 | router.get('/showRanking', function (req, res, next) {
42 | movie.find({movieMainPage: true}, function (err, getRecommend) {
43 | res.json({status: 0 , message: "获取所有主页推荐的电影", data: getRecommend});
44 | })
45 | });
46 |
47 | // 显示所有的电影
48 | router.get('/showMovie', function (req, res, next) {
49 | movie.findAll(function (err, getMovies) {
50 | res.json({status: 0 , message: "获取所有的电影", data: getMovies});
51 | })
52 | });
53 |
54 | // 显示主页的推荐文章
55 | router.get('/showArticle', function (req, res, next) {
56 | article.find({articleMainPage: true}, function (err, getArticles) {
57 | res.json({status: 0 , message: "获取所有主页推荐的文章", data: getArticles});
58 | })
59 | });
60 |
61 | // 显示所有的文章
62 | router.get('/showAllArticle', function (req, res, next) {
63 | article.findAll(function (err, getAllArticles) {
64 | res.json({status: 0 , message: "获取所有的文章", data: getAllArticles});
65 | })
66 | });
67 |
68 | // 显示文章的内容
69 | router.post('/articleDetail', function (req, res, next) {
70 | if(!req.body.article_id)
71 | res.json({status:1, message: "文章id出错"});
72 | article.findByArticleId(req.body.article_id, function (err, getArticle) {
73 | res.json({status: 0 , message: "获取文章成功", data: getArticle});
74 | })
75 | });
76 |
77 | // 显示用户个人信息的内容
78 | router.post('/showUser', function (req, res, next) {
79 | if(!req.body.user_id)
80 | res.json({status:1, message: "用户未登录"});
81 | user.findByUserId(req.body.user_id, function (err, getUser) {
82 | res.json({status:0, message: "获取用户信息成功", data: {
83 | user_id: getUser[0]._id,
84 | username: getUser[0].username,
85 | userMail: getUser[0].userMail,
86 | userPhone: getUser[0].userPhone,
87 | userAdmin: getUser[0].userAdmin,
88 | userPower: getUser[0].userPower,
89 | userStop: getUser[0].userStop
90 | }})
91 | })
92 | });
93 |
94 | module.exports = router;
95 |
--------------------------------------------------------------------------------
/book_service/routes/users.js:
--------------------------------------------------------------------------------
1 | var express = require('express');
2 | var router = express.Router();
3 | var user = require('../models/user');
4 | var crypto = require('crypto');
5 | var movie = require('../models/movie');
6 | var mail = require('../models/mail');
7 | var comment = require('../models/comment');
8 | var article = require('../models/article');
9 | const init_token = 'TKL02o';
10 |
11 | /* GET users listing. */
12 | // status: 1为出错,0为正常。message: 提示信息。data: 返回的数据
13 | // 用户登录接口
14 | router.post('/login', function (req, res, next) {
15 | if(!req.body.username)
16 | res.json({status:1, message: "用户名为空"});
17 | if(!req.body.password)
18 | res.json({status:1, message: "密码为空"});
19 | user.findUserLogin(req.body.username, req.body.password, function (err, userSave) {
20 | console.log(userSave);
21 | if(userSave.length != 0){
22 | if(userSave[0].userStop == true)
23 | res.json({status:1, message: "该账户已被封停"});
24 | else{
25 | var token_after = getMD5Password(userSave[0]._id);
26 | res.json({status:0, data: {token: token_after, user: userSave}, message: "用户登录成功"});
27 | }
28 | }
29 | else
30 | res.json({status:1, message: "用户名或密码错误"});
31 | });
32 | });
33 |
34 | // 用户注册接口
35 | router.post('/register', function (req, res, next) {
36 | if(!req.body.username)
37 | res.json({status:1, message: "用户名为空"});
38 | if(!req.body.password)
39 | res.json({status:1, message: "密码为空"});
40 | if(!req.body.userMail)
41 | res.json({status:1, message: "邮箱为空"});
42 | if(!req.body.userPhone)
43 | res.json({status:1, message: "手机号码为空"});
44 |
45 | user.findByUsername(req.body.username, function (err, userSave) {
46 | if(userSave.length != 0)
47 | res.json({status:1, message: "用户名已存在"});
48 | else{
49 | var registerUser = new user({
50 | username: req.body.username,
51 | password: req.body.password,
52 | userMail: req.body.userMail,
53 | userPhone: req.body.userPhone,
54 | userAdmin: 0,
55 | userPower: 0,
56 | userStop: 0
57 | });
58 | registerUser.save(function () {
59 | res.json({status:0, message: "注册成功"});
60 | });
61 | }
62 | })
63 | });
64 |
65 | // 用户评论接口
66 | router.post('/postComment', function (req, res, next) {
67 | if(!req.body.username)
68 | var username = "匿名用户";
69 | if(!req.body.movie_id)
70 | res.json({status:1, message: "电影id为空"});
71 | else if(!req.body.context){
72 | res.json({status:1, message: "评论内容为空"});
73 | }
74 | else{
75 | var saveComment = new comment({
76 | movie_id: req.body.movie_id,
77 | username: req.body.username ? req.body.username : username,
78 | context: req.body.context,
79 | check: 0
80 | });
81 | saveComment.save(function (err) {
82 | if(err)
83 | res.json({status:1, message: err});
84 | else
85 | res.json({status:0, message: "评论成功,请等待系统管理员审核"});
86 | });
87 | }
88 | });
89 |
90 | // 根据用户id查询用户身份
91 | router.post('/showIdentity', function(req, res, next) {
92 | if(!req.body.user_id)
93 | res.json({status:1, message: "用户id为空"});
94 | user.findByUserId(req.body.user_id, function (err, identityData) {
95 | res.json({status:0, message:"获取用户身份信息成功", data: identityData});
96 | })
97 | });
98 |
99 | // 根据电影id获取已审核的评论
100 | router.post('/showComment', function(req, res, next) {
101 | if(!req.body.movie_id)
102 | res.json({status:1, message: "电影id为空"});
103 | comment.findByMovieId(req.body.movie_id, function (err, comment) {
104 | res.json({status:0, message:"获取已审核的评论成功", data: comment});
105 | })
106 | });
107 |
108 | // 用户点赞接口
109 | router.post('/support', function (req, res, next) {
110 | if(!req.body.movie_id)
111 | res.json({status:1, message: "电影id为空"});
112 | movie.findById(req.body.movie_id, function (err, supportMovie) {
113 | movie.update({_id: req.body.movie_id}, {movieNumSuppose: supportMovie[0].movieNumSuppose+1}, function (err) {
114 | if(err)
115 | res.json({status:1, message: "点赞失败", data: err});
116 | else
117 | res.json({status:0, message: "点赞成功"});
118 | });
119 | });
120 | });
121 |
122 | // 用户找回密码接口
123 | router.post('/findPassword', function (req, res, next) {
124 | if(!req.body.username)
125 | res.json({status:1, message: "用户名为空"});
126 | if(!req.body.userMail)
127 | res.json({status:1, message: "邮箱为空"});
128 | if(!req.body.userPhone)
129 | res.json({status:1, message: "手机号码为空"});
130 | // 如果newPassword不存在,则检查该用户是否存在;若newPassword存在,则修改用户的密码
131 | if(!req.body.newPassword){
132 | user.findUserPassword(req.body.username, req.body.userMail, req.body.userPhone, function (err, findUser) {
133 | if(findUser.length != 0){
134 | if(findUser[0].userStop === false)
135 | res.json({status: 0, message : "验证成功"});
136 | else
137 | res.json({status: 1, message : "该账户已被封停,无法设置新密码"});
138 | } else {
139 | res.json({status: 1, message : "验证失败,请检查所有信息是否正确"});
140 | }
141 | })
142 | } else {
143 | user.findByUsername(req.body.username, function (err) {
144 | user.update({username: req.body.username}, {password: req.body.newPassword}, function (err) {
145 | if(err)
146 | res.json({status:1, message: "设置新密码失败", data: err});
147 | else
148 | res.json({status:0, message: "设置新密码成功"});
149 | })
150 | })
151 | }
152 |
153 | });
154 |
155 | // 用户发送站内信接口
156 | router.post('/sendEmail', function (req, res, next) {
157 | if(!req.body.token)
158 | res.json({status:1, message: "用户登录状态出错"});
159 | if(!req.body.user_id)
160 | res.json({status:1, message: "用户未登录"});
161 | if(!req.body.toUserName)
162 | res.json({status:1, message: "收信人不能为空"});
163 | if(!req.body.title)
164 | res.json({status:1, message: "标题不能为空"});
165 | if(!req.body.context)
166 | res.json({status:1, message: "内容不能为空"});
167 | if(req.body.token == getMD5Password(req.body.user_id)){
168 | user.findByUsername(req.body.toUserName, function (err, toUser) {
169 | if(toUser.length != 0){
170 | var nowTime = new Date();
171 | var newEmail = new mail({
172 | fromUser: req.body.user_id,
173 | toUser: toUser[0]._id,
174 | title: req.body.title,
175 | context: req.body.context,
176 | date: nowTime.toLocaleString()
177 | });
178 | newEmail.save(function () {
179 | res.json({status: 0, message : "发送成功"});
180 | });
181 | }else{
182 | res.json({status: 1, message : "收信人不存在"});
183 | }
184 | })
185 | }else{
186 | res.json({status: 1, message : "用户登录错误"});
187 | }
188 | });
189 |
190 |
191 | // 接收站内信接口,receive=1:发送的内容,receive=2:接收的内容
192 | router.post('/showEmail', function (req, res, next) {
193 | if(!req.body.token)
194 | res.json({status:1, message: "用户登录状态出错"});
195 | if(!req.body.user_id)
196 | res.json({status:1, message: "用户未登录"});
197 | if(!req.body.receive)
198 | res.json({status:1, message: "参数出错"});
199 | if(req.body.token == getMD5Password(req.body.user_id)){
200 | if(req.body.receive == 1){
201 | mail.findByFromUserId(req.body.user_id, function (err, sendMail) {
202 | res.json({status: 0, message : "获取发送的站内信成功", data: sendMail});
203 | })
204 | }else{
205 | mail.findByToUserId(req.body.user_id, function (err, receiveMail) {
206 | res.json({status: 0, message : "获取收到的站内信成功", data: receiveMail});
207 | })
208 | }
209 | }else{
210 | res.json({status: 1, message : "用户登录错误"});
211 | }
212 | });
213 |
214 | // 下载电影接口
215 | router.post('/download', function (req, res, next) {
216 | if(!req.body.movie_id)
217 | res.json({status:1, message: "电影id为空"});
218 | movie.findById(req.body.movie_id, function (err, supportMovie) {
219 | if(err)
220 | res.json({status:1, message: "下载失败:不存在此电影id", data: err});
221 | else
222 | {
223 | movie.update({_id: req.body.movie_id}, {movieNumDownload: supportMovie[0].movieNumDownload+1}, function (err) {
224 | if(err)
225 | res.json({status:1, message: "下载失败", data: err});
226 | else
227 | res.json({status:0, message: "下载成功", data: supportMovie[0].movieDownload});
228 | });
229 | }
230 | });
231 | });
232 |
233 | // 根据id查看电影接口
234 | router.post('/movieDetail', function (req, res, next) {
235 | if(!req.body.movie_id)
236 | res.json({status:1, message: "电影id为空"});
237 | movie.findById(req.body.movie_id, function (err, findMovie) {
238 | if(err)
239 | res.json({status:1, message: "不存在此电影id", data: err});
240 | else
241 | {
242 | if(err)
243 | res.json({status:1, message: "根据id查看电影失败", data: err});
244 | else
245 | res.json({status:0, message: "根据id查看电影成功", data: findMovie[0]});
246 | }
247 | });
248 | });
249 |
250 | // 根据id查看文章接口
251 | router.post('/articleDetail', function (req, res, next) {
252 | if(!req.body.article_id)
253 | res.json({status:1, message: "文章id为空"});
254 | article.findByArticleId(req.body.article_id, function (err, findArticle) {
255 | if(err)
256 | res.json({status:1, message: "不存在此文章id", data: err});
257 | else
258 | {
259 | if(err)
260 | res.json({status:1, message: "根据id查看文章失败", data: err});
261 | else
262 | res.json({status:0, message: "根据id查看文章成功", data: findArticle[0]});
263 | }
264 | });
265 | });
266 |
267 | // 获取MD5值
268 | function getMD5Password(id){
269 | var md5 = crypto.createHash('md5');
270 | var token_before = id + init_token;
271 | return md5.update(token_before).digest('hex');
272 | }
273 |
274 | module.exports = router;
275 |
--------------------------------------------------------------------------------
/book_service/views/error.jade:
--------------------------------------------------------------------------------
1 | extends layout
2 |
3 | block content
4 | h1= message
5 | h2= error.status
6 | pre #{error.stack}
7 |
--------------------------------------------------------------------------------
/book_service/views/index.jade:
--------------------------------------------------------------------------------
1 | extends layout
2 |
3 | block content
4 | h1= title
5 | p Welcome to #{title}
6 |
--------------------------------------------------------------------------------
/book_service/views/layout.jade:
--------------------------------------------------------------------------------
1 | doctype html
2 | html
3 | head
4 | title= title
5 | link(rel='stylesheet', href='/stylesheets/style.css')
6 | body
7 | block content
8 |
--------------------------------------------------------------------------------
/book_view/.babelrc:
--------------------------------------------------------------------------------
1 | {
2 | "presets": [
3 | ["env", {
4 | "modules": false,
5 | "targets": {
6 | "browsers": ["> 1%", "last 2 versions", "not ie <= 8"]
7 | }
8 | }],
9 | "stage-2"
10 | ],
11 | "plugins": ["transform-vue-jsx", "transform-runtime"],
12 | "env": {
13 | "test": {
14 | "presets": ["env", "stage-2"],
15 | "plugins": ["transform-vue-jsx", "transform-es2015-modules-commonjs", "dynamic-import-node"]
16 | }
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/book_view/.editorconfig:
--------------------------------------------------------------------------------
1 | root = true
2 |
3 | [*]
4 | charset = utf-8
5 | indent_style = space
6 | indent_size = 2
7 | end_of_line = lf
8 | insert_final_newline = true
9 | trim_trailing_whitespace = true
10 |
--------------------------------------------------------------------------------
/book_view/.eslintignore:
--------------------------------------------------------------------------------
1 | /build/
2 | /config/
3 | /dist/
4 | /*.js
5 | /test/unit/coverage/
6 |
--------------------------------------------------------------------------------
/book_view/.eslintrc.js:
--------------------------------------------------------------------------------
1 | // https://eslint.org/docs/user-guide/configuring
2 |
3 | module.exports = {
4 | root: true,
5 | parserOptions: {
6 | parser: 'babel-eslint'
7 | },
8 | env: {
9 | browser: true,
10 | },
11 | extends: [
12 | // https://github.com/vuejs/eslint-plugin-vue#priority-a-essential-error-prevention
13 | // consider switching to `plugin:vue/strongly-recommended` or `plugin:vue/recommended` for stricter rules.
14 | 'plugin:vue/essential',
15 | // https://github.com/standard/standard/blob/master/docs/RULES-en.md
16 | 'standard'
17 | ],
18 | // required to lint *.vue files
19 | plugins: [
20 | 'vue'
21 | ],
22 | // add your custom rules here
23 | rules: {
24 | // allow async-await
25 | 'generator-star-spacing': 'off',
26 | // allow debugger during development
27 | 'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off'
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/book_view/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | node_modules/
3 | /dist/
4 | npm-debug.log*
5 | yarn-debug.log*
6 | yarn-error.log*
7 | /test/unit/coverage/
8 | /test/e2e/reports/
9 | selenium-debug.log
10 |
11 | # Editor directories and files
12 | .idea
13 | .vscode
14 | *.suo
15 | *.ntvs*
16 | *.njsproj
17 | *.sln
18 |
--------------------------------------------------------------------------------
/book_view/.postcssrc.js:
--------------------------------------------------------------------------------
1 | // https://github.com/michael-ciniawsky/postcss-load-config
2 |
3 | module.exports = {
4 | "plugins": {
5 | "postcss-import": {},
6 | "postcss-url": {},
7 | // to edit target browsers: use "browserslist" field in package.json
8 | "autoprefixer": {}
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/book_view/README.md:
--------------------------------------------------------------------------------
1 | # book_view
2 |
3 | > A Vue.js project
4 |
5 | ## Build Setup
6 |
7 | ``` bash
8 | # install dependencies
9 | npm install
10 |
11 | # serve with hot reload at localhost:8080
12 | npm run dev
13 |
14 | # build for production with minification
15 | npm run build
16 |
17 | # build for production and view the bundle analyzer report
18 | npm run build --report
19 |
20 | # run unit tests
21 | npm run unit
22 |
23 | # run e2e tests
24 | npm run e2e
25 |
26 | # run all tests
27 | npm test
28 | ```
29 |
30 | For a detailed explanation on how things work, check out the [guide](http://vuejs-templates.github.io/webpack/) and [docs for vue-loader](http://vuejs.github.io/vue-loader).
31 |
--------------------------------------------------------------------------------
/book_view/build/build.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 | require('./check-versions')()
3 |
4 | process.env.NODE_ENV = 'production'
5 |
6 | const ora = require('ora')
7 | const rm = require('rimraf')
8 | const path = require('path')
9 | const chalk = require('chalk')
10 | const webpack = require('webpack')
11 | const config = require('../config')
12 | const webpackConfig = require('./webpack.prod.conf')
13 |
14 | const spinner = ora('building for production...')
15 | spinner.start()
16 |
17 | rm(path.join(config.build.assetsRoot, config.build.assetsSubDirectory), err => {
18 | if (err) throw err
19 | webpack(webpackConfig, (err, stats) => {
20 | spinner.stop()
21 | if (err) throw err
22 | process.stdout.write(stats.toString({
23 | colors: true,
24 | modules: false,
25 | children: false, // If you are using ts-loader, setting this to true will make TypeScript errors show up during build.
26 | chunks: false,
27 | chunkModules: false
28 | }) + '\n\n')
29 |
30 | if (stats.hasErrors()) {
31 | console.log(chalk.red(' Build failed with errors.\n'))
32 | process.exit(1)
33 | }
34 |
35 | console.log(chalk.cyan(' Build complete.\n'))
36 | console.log(chalk.yellow(
37 | ' Tip: built files are meant to be served over an HTTP server.\n' +
38 | ' Opening index.html over file:// won\'t work.\n'
39 | ))
40 | })
41 | })
42 |
--------------------------------------------------------------------------------
/book_view/build/check-versions.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 | const chalk = require('chalk')
3 | const semver = require('semver')
4 | const packageConfig = require('../package.json')
5 | const shell = require('shelljs')
6 |
7 | function exec (cmd) {
8 | return require('child_process').execSync(cmd).toString().trim()
9 | }
10 |
11 | const versionRequirements = [
12 | {
13 | name: 'node',
14 | currentVersion: semver.clean(process.version),
15 | versionRequirement: packageConfig.engines.node
16 | }
17 | ]
18 |
19 | if (shell.which('npm')) {
20 | versionRequirements.push({
21 | name: 'npm',
22 | currentVersion: exec('npm --version'),
23 | versionRequirement: packageConfig.engines.npm
24 | })
25 | }
26 |
27 | module.exports = function () {
28 | const warnings = []
29 |
30 | for (let i = 0; i < versionRequirements.length; i++) {
31 | const mod = versionRequirements[i]
32 |
33 | if (!semver.satisfies(mod.currentVersion, mod.versionRequirement)) {
34 | warnings.push(mod.name + ': ' +
35 | chalk.red(mod.currentVersion) + ' should be ' +
36 | chalk.green(mod.versionRequirement)
37 | )
38 | }
39 | }
40 |
41 | if (warnings.length) {
42 | console.log('')
43 | console.log(chalk.yellow('To use this template, you must update following to modules:'))
44 | console.log()
45 |
46 | for (let i = 0; i < warnings.length; i++) {
47 | const warning = warnings[i]
48 | console.log(' ' + warning)
49 | }
50 |
51 | console.log()
52 | process.exit(1)
53 | }
54 | }
55 |
--------------------------------------------------------------------------------
/book_view/build/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wangjun1996/VueMovieWebsite/31b11000a973ea36fd0e8b2b84af759534114a7f/book_view/build/logo.png
--------------------------------------------------------------------------------
/book_view/build/utils.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 | const path = require('path')
3 | const config = require('../config')
4 | const ExtractTextPlugin = require('extract-text-webpack-plugin')
5 | const packageConfig = require('../package.json')
6 |
7 | exports.assetsPath = function (_path) {
8 | const assetsSubDirectory = process.env.NODE_ENV === 'production'
9 | ? config.build.assetsSubDirectory
10 | : config.dev.assetsSubDirectory
11 |
12 | return path.posix.join(assetsSubDirectory, _path)
13 | }
14 |
15 | exports.cssLoaders = function (options) {
16 | options = options || {}
17 |
18 | const cssLoader = {
19 | loader: 'css-loader',
20 | options: {
21 | sourceMap: options.sourceMap
22 | }
23 | }
24 |
25 | const postcssLoader = {
26 | loader: 'postcss-loader',
27 | options: {
28 | sourceMap: options.sourceMap
29 | }
30 | }
31 |
32 | // generate loader string to be used with extract text plugin
33 | function generateLoaders (loader, loaderOptions) {
34 | const loaders = options.usePostCSS ? [cssLoader, postcssLoader] : [cssLoader]
35 |
36 | if (loader) {
37 | loaders.push({
38 | loader: loader + '-loader',
39 | options: Object.assign({}, loaderOptions, {
40 | sourceMap: options.sourceMap
41 | })
42 | })
43 | }
44 |
45 | // Extract CSS when that option is specified
46 | // (which is the case during production build)
47 | if (options.extract) {
48 | return ExtractTextPlugin.extract({
49 | use: loaders,
50 | fallback: 'vue-style-loader'
51 | })
52 | } else {
53 | return ['vue-style-loader'].concat(loaders)
54 | }
55 | }
56 |
57 | // https://vue-loader.vuejs.org/en/configurations/extract-css.html
58 | return {
59 | css: generateLoaders(),
60 | postcss: generateLoaders(),
61 | less: generateLoaders('less'),
62 | sass: generateLoaders('sass', { indentedSyntax: true }),
63 | scss: generateLoaders('sass'),
64 | stylus: generateLoaders('stylus'),
65 | styl: generateLoaders('stylus')
66 | }
67 | }
68 |
69 | // Generate loaders for standalone style files (outside of .vue)
70 | exports.styleLoaders = function (options) {
71 | const output = []
72 | const loaders = exports.cssLoaders(options)
73 |
74 | for (const extension in loaders) {
75 | const loader = loaders[extension]
76 | output.push({
77 | test: new RegExp('\\.' + extension + '$'),
78 | use: loader
79 | })
80 | }
81 |
82 | return output
83 | }
84 |
85 | exports.createNotifierCallback = () => {
86 | const notifier = require('node-notifier')
87 |
88 | return (severity, errors) => {
89 | if (severity !== 'error') return
90 |
91 | const error = errors[0]
92 | const filename = error.file && error.file.split('!').pop()
93 |
94 | notifier.notify({
95 | title: packageConfig.name,
96 | message: severity + ': ' + error.name,
97 | subtitle: filename || '',
98 | icon: path.join(__dirname, 'logo.png')
99 | })
100 | }
101 | }
102 |
--------------------------------------------------------------------------------
/book_view/build/vue-loader.conf.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 | const utils = require('./utils')
3 | const config = require('../config')
4 | const isProduction = process.env.NODE_ENV === 'production'
5 | const sourceMapEnabled = isProduction
6 | ? config.build.productionSourceMap
7 | : config.dev.cssSourceMap
8 |
9 | module.exports = {
10 | loaders: utils.cssLoaders({
11 | sourceMap: sourceMapEnabled,
12 | extract: isProduction
13 | }),
14 | cssSourceMap: sourceMapEnabled,
15 | cacheBusting: config.dev.cacheBusting,
16 | transformToRequire: {
17 | video: ['src', 'poster'],
18 | source: 'src',
19 | img: 'src',
20 | image: 'xlink:href'
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/book_view/build/webpack.base.conf.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 | const path = require('path')
3 | const utils = require('./utils')
4 | const config = require('../config')
5 | const vueLoaderConfig = require('./vue-loader.conf')
6 |
7 | function resolve (dir) {
8 | return path.join(__dirname, '..', dir)
9 | }
10 |
11 | const createLintingRule = () => ({
12 | test: /\.(js|vue)$/,
13 | loader: 'eslint-loader',
14 | enforce: 'pre',
15 | include: [resolve('src'), resolve('test')],
16 | options: {
17 | formatter: require('eslint-friendly-formatter'),
18 | emitWarning: !config.dev.showEslintErrorsInOverlay
19 | }
20 | })
21 |
22 | module.exports = {
23 | context: path.resolve(__dirname, '../'),
24 | entry: {
25 | app: './src/main.js'
26 | },
27 | output: {
28 | path: config.build.assetsRoot,
29 | filename: '[name].js',
30 | publicPath: process.env.NODE_ENV === 'production'
31 | ? config.build.assetsPublicPath
32 | : config.dev.assetsPublicPath
33 | },
34 | resolve: {
35 | extensions: ['.js', '.vue', '.json'],
36 | alias: {
37 | 'vue$': 'vue/dist/vue.esm.js',
38 | '@': resolve('src'),
39 | }
40 | },
41 | module: {
42 | rules: [
43 | // ...(config.dev.useEslint ? [createLintingRule()] : []),
44 | {
45 | test: /\.vue$/,
46 | loader: 'vue-loader',
47 | options: vueLoaderConfig
48 | },
49 | {
50 | test: /\.js$/,
51 | loader: 'babel-loader',
52 | include: [resolve('src'), resolve('test'), resolve('node_modules/webpack-dev-server/client')]
53 | },
54 | {
55 | test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
56 | loader: 'url-loader',
57 | options: {
58 | limit: 10000,
59 | name: utils.assetsPath('img/[name].[hash:7].[ext]')
60 | }
61 | },
62 | {
63 | test: /\.(mp4|webm|ogg|mp3|wav|flac|aac)(\?.*)?$/,
64 | loader: 'url-loader',
65 | options: {
66 | limit: 10000,
67 | name: utils.assetsPath('media/[name].[hash:7].[ext]')
68 | }
69 | },
70 | {
71 | test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/,
72 | loader: 'url-loader',
73 | options: {
74 | limit: 10000,
75 | name: utils.assetsPath('fonts/[name].[hash:7].[ext]')
76 | }
77 | }
78 | ]
79 | },
80 | node: {
81 | // prevent webpack from injecting useless setImmediate polyfill because Vue
82 | // source contains it (although only uses it if it's native).
83 | setImmediate: false,
84 | // prevent webpack from injecting mocks to Node native modules
85 | // that does not make sense for the client
86 | dgram: 'empty',
87 | fs: 'empty',
88 | net: 'empty',
89 | tls: 'empty',
90 | child_process: 'empty'
91 | }
92 | }
93 |
--------------------------------------------------------------------------------
/book_view/build/webpack.dev.conf.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 | const utils = require('./utils')
3 | const webpack = require('webpack')
4 | const config = require('../config')
5 | const merge = require('webpack-merge')
6 | const path = require('path')
7 | const baseWebpackConfig = require('./webpack.base.conf')
8 | const CopyWebpackPlugin = require('copy-webpack-plugin')
9 | const HtmlWebpackPlugin = require('html-webpack-plugin')
10 | const FriendlyErrorsPlugin = require('friendly-errors-webpack-plugin')
11 | const portfinder = require('portfinder')
12 |
13 | const HOST = process.env.HOST
14 | const PORT = process.env.PORT && Number(process.env.PORT)
15 |
16 | const devWebpackConfig = merge(baseWebpackConfig, {
17 | module: {
18 | rules: utils.styleLoaders({ sourceMap: config.dev.cssSourceMap, usePostCSS: true })
19 | },
20 | // cheap-module-eval-source-map is faster for development
21 | devtool: config.dev.devtool,
22 |
23 | // these devServer options should be customized in /config/index.js
24 | devServer: {
25 | clientLogLevel: 'warning',
26 | historyApiFallback: {
27 | rewrites: [
28 | { from: /.*/, to: path.posix.join(config.dev.assetsPublicPath, 'index.html') },
29 | ],
30 | },
31 | hot: true,
32 | contentBase: false, // since we use CopyWebpackPlugin.
33 | compress: true,
34 | host: HOST || config.dev.host,
35 | port: PORT || config.dev.port,
36 | open: config.dev.autoOpenBrowser,
37 | overlay: config.dev.errorOverlay
38 | ? { warnings: false, errors: true }
39 | : false,
40 | publicPath: config.dev.assetsPublicPath,
41 | proxy: config.dev.proxyTable,
42 | quiet: true, // necessary for FriendlyErrorsPlugin
43 | watchOptions: {
44 | poll: config.dev.poll,
45 | }
46 | },
47 | plugins: [
48 | new webpack.DefinePlugin({
49 | 'process.env': require('../config/dev.env')
50 | }),
51 | new webpack.HotModuleReplacementPlugin(),
52 | new webpack.NamedModulesPlugin(), // HMR shows correct file names in console on update.
53 | new webpack.NoEmitOnErrorsPlugin(),
54 | // https://github.com/ampedandwired/html-webpack-plugin
55 | new HtmlWebpackPlugin({
56 | filename: 'index.html',
57 | template: 'index.html',
58 | inject: true
59 | }),
60 | // copy custom static assets
61 | new CopyWebpackPlugin([
62 | {
63 | from: path.resolve(__dirname, '../static'),
64 | to: config.dev.assetsSubDirectory,
65 | ignore: ['.*']
66 | }
67 | ])
68 | ]
69 | })
70 |
71 | module.exports = new Promise((resolve, reject) => {
72 | portfinder.basePort = process.env.PORT || config.dev.port
73 | portfinder.getPort((err, port) => {
74 | if (err) {
75 | reject(err)
76 | } else {
77 | // publish the new Port, necessary for e2e tests
78 | process.env.PORT = port
79 | // add port to devServer config
80 | devWebpackConfig.devServer.port = port
81 |
82 | // Add FriendlyErrorsPlugin
83 | devWebpackConfig.plugins.push(new FriendlyErrorsPlugin({
84 | compilationSuccessInfo: {
85 | messages: [`Your application is running here: http://${devWebpackConfig.devServer.host}:${port}`],
86 | },
87 | onErrors: config.dev.notifyOnErrors
88 | ? utils.createNotifierCallback()
89 | : undefined
90 | }))
91 |
92 | resolve(devWebpackConfig)
93 | }
94 | })
95 | })
96 |
--------------------------------------------------------------------------------
/book_view/build/webpack.prod.conf.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 | const path = require('path')
3 | const utils = require('./utils')
4 | const webpack = require('webpack')
5 | const config = require('../config')
6 | const merge = require('webpack-merge')
7 | const baseWebpackConfig = require('./webpack.base.conf')
8 | const CopyWebpackPlugin = require('copy-webpack-plugin')
9 | const HtmlWebpackPlugin = require('html-webpack-plugin')
10 | const ExtractTextPlugin = require('extract-text-webpack-plugin')
11 | const OptimizeCSSPlugin = require('optimize-css-assets-webpack-plugin')
12 | const UglifyJsPlugin = require('uglifyjs-webpack-plugin')
13 |
14 | const env = process.env.NODE_ENV === 'testing'
15 | ? require('../config/test.env')
16 | : require('../config/prod.env')
17 |
18 | const webpackConfig = merge(baseWebpackConfig, {
19 | module: {
20 | rules: utils.styleLoaders({
21 | sourceMap: config.build.productionSourceMap,
22 | extract: true,
23 | usePostCSS: true
24 | })
25 | },
26 | devtool: config.build.productionSourceMap ? config.build.devtool : false,
27 | output: {
28 | path: config.build.assetsRoot,
29 | filename: utils.assetsPath('js/[name].[chunkhash].js'),
30 | chunkFilename: utils.assetsPath('js/[id].[chunkhash].js')
31 | },
32 | plugins: [
33 | // http://vuejs.github.io/vue-loader/en/workflow/production.html
34 | new webpack.DefinePlugin({
35 | 'process.env': env
36 | }),
37 | new UglifyJsPlugin({
38 | uglifyOptions: {
39 | compress: {
40 | warnings: false
41 | }
42 | },
43 | sourceMap: config.build.productionSourceMap,
44 | parallel: true
45 | }),
46 | // extract css into its own file
47 | new ExtractTextPlugin({
48 | filename: utils.assetsPath('css/[name].[contenthash].css'),
49 | // Setting the following option to `false` will not extract CSS from codesplit chunks.
50 | // Their CSS will instead be inserted dynamically with style-loader when the codesplit chunk has been loaded by webpack.
51 | // It's currently set to `true` because we are seeing that sourcemaps are included in the codesplit bundle as well when it's `false`,
52 | // increasing file size: https://github.com/vuejs-templates/webpack/issues/1110
53 | allChunks: true,
54 | }),
55 | // Compress extracted CSS. We are using this plugin so that possible
56 | // duplicated CSS from different components can be deduped.
57 | new OptimizeCSSPlugin({
58 | cssProcessorOptions: config.build.productionSourceMap
59 | ? { safe: true, map: { inline: false } }
60 | : { safe: true }
61 | }),
62 | // generate dist index.html with correct asset hash for caching.
63 | // you can customize output by editing /index.html
64 | // see https://github.com/ampedandwired/html-webpack-plugin
65 | new HtmlWebpackPlugin({
66 | filename: process.env.NODE_ENV === 'testing'
67 | ? 'index.html'
68 | : config.build.index,
69 | template: 'index.html',
70 | inject: true,
71 | minify: {
72 | removeComments: true,
73 | collapseWhitespace: true,
74 | removeAttributeQuotes: true
75 | // more options:
76 | // https://github.com/kangax/html-minifier#options-quick-reference
77 | },
78 | // necessary to consistently work with multiple chunks via CommonsChunkPlugin
79 | chunksSortMode: 'dependency'
80 | }),
81 | // keep module.id stable when vendor modules does not change
82 | new webpack.HashedModuleIdsPlugin(),
83 | // enable scope hoisting
84 | new webpack.optimize.ModuleConcatenationPlugin(),
85 | // split vendor js into its own file
86 | new webpack.optimize.CommonsChunkPlugin({
87 | name: 'vendor',
88 | minChunks (module) {
89 | // any required modules inside node_modules are extracted to vendor
90 | return (
91 | module.resource &&
92 | /\.js$/.test(module.resource) &&
93 | module.resource.indexOf(
94 | path.join(__dirname, '../node_modules')
95 | ) === 0
96 | )
97 | }
98 | }),
99 | // extract webpack runtime and module manifest to its own file in order to
100 | // prevent vendor hash from being updated whenever app bundle is updated
101 | new webpack.optimize.CommonsChunkPlugin({
102 | name: 'manifest',
103 | minChunks: Infinity
104 | }),
105 | // This instance extracts shared chunks from code splitted chunks and bundles them
106 | // in a separate chunk, similar to the vendor chunk
107 | // see: https://webpack.js.org/plugins/commons-chunk-plugin/#extra-async-commons-chunk
108 | new webpack.optimize.CommonsChunkPlugin({
109 | name: 'app',
110 | async: 'vendor-async',
111 | children: true,
112 | minChunks: 3
113 | }),
114 |
115 | // copy custom static assets
116 | new CopyWebpackPlugin([
117 | {
118 | from: path.resolve(__dirname, '../static'),
119 | to: config.build.assetsSubDirectory,
120 | ignore: ['.*']
121 | }
122 | ])
123 | ]
124 | })
125 |
126 | if (config.build.productionGzip) {
127 | const CompressionWebpackPlugin = require('compression-webpack-plugin')
128 |
129 | webpackConfig.plugins.push(
130 | new CompressionWebpackPlugin({
131 | asset: '[path].gz[query]',
132 | algorithm: 'gzip',
133 | test: new RegExp(
134 | '\\.(' +
135 | config.build.productionGzipExtensions.join('|') +
136 | ')$'
137 | ),
138 | threshold: 10240,
139 | minRatio: 0.8
140 | })
141 | )
142 | }
143 |
144 | if (config.build.bundleAnalyzerReport) {
145 | const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin
146 | webpackConfig.plugins.push(new BundleAnalyzerPlugin())
147 | }
148 |
149 | module.exports = webpackConfig
150 |
--------------------------------------------------------------------------------
/book_view/config/dev.env.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 | const merge = require('webpack-merge')
3 | const prodEnv = require('./prod.env')
4 |
5 | module.exports = merge(prodEnv, {
6 | NODE_ENV: '"development"'
7 | })
8 |
--------------------------------------------------------------------------------
/book_view/config/index.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 | // Template version: 1.3.1
3 | // see http://vuejs-templates.github.io/webpack for documentation.
4 |
5 | const path = require('path')
6 |
7 | module.exports = {
8 | dev: {
9 |
10 | // Paths
11 | assetsSubDirectory: 'static',
12 | assetsPublicPath: '/',
13 | proxyTable: {},
14 |
15 | // Various Dev Server settings
16 | host: 'localhost', // can be overwritten by process.env.HOST
17 | port: 8080, // can be overwritten by process.env.PORT, if port is in use, a free one will be determined
18 | autoOpenBrowser: false,
19 | errorOverlay: true,
20 | notifyOnErrors: true,
21 | poll: false, // https://webpack.js.org/configuration/dev-server/#devserver-watchoptions-
22 |
23 | // Use Eslint Loader?
24 | // If true, your code will be linted during bundling and
25 | // linting errors and warnings will be shown in the console.
26 | useEslint: true,
27 | // If true, eslint errors and warnings will also be shown in the error overlay
28 | // in the browser.
29 | showEslintErrorsInOverlay: false,
30 |
31 | /**
32 | * Source Maps
33 | */
34 |
35 | // https://webpack.js.org/configuration/devtool/#development
36 | devtool: 'cheap-module-eval-source-map',
37 |
38 | // If you have problems debugging vue-files in devtools,
39 | // set this to false - it *may* help
40 | // https://vue-loader.vuejs.org/en/options.html#cachebusting
41 | cacheBusting: true,
42 |
43 | cssSourceMap: true
44 | },
45 |
46 | build: {
47 | // Template for index.html
48 | index: path.resolve(__dirname, '../dist/index.html'),
49 |
50 | // Paths
51 | assetsRoot: path.resolve(__dirname, '../dist'),
52 | assetsSubDirectory: 'static',
53 | assetsPublicPath: '/',
54 |
55 | /**
56 | * Source Maps
57 | */
58 |
59 | productionSourceMap: true,
60 | // https://webpack.js.org/configuration/devtool/#production
61 | devtool: '#source-map',
62 |
63 | // Gzip off by default as many popular static hosts such as
64 | // Surge or Netlify already gzip all static assets for you.
65 | // Before setting to `true`, make sure to:
66 | // npm install --save-dev compression-webpack-plugin
67 | productionGzip: false,
68 | productionGzipExtensions: ['js', 'css'],
69 |
70 | // Run the build command with an extra argument to
71 | // View the bundle analyzer report after build finishes:
72 | // `npm run build --report`
73 | // Set to `true` or `false` to always turn it on or off
74 | bundleAnalyzerReport: process.env.npm_config_report
75 | }
76 | }
77 |
--------------------------------------------------------------------------------
/book_view/config/prod.env.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 | module.exports = {
3 | NODE_ENV: '"production"'
4 | }
5 |
--------------------------------------------------------------------------------
/book_view/config/test.env.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 | const merge = require('webpack-merge')
3 | const devEnv = require('./dev.env')
4 |
5 | module.exports = merge(devEnv, {
6 | NODE_ENV: '"testing"'
7 | })
8 |
--------------------------------------------------------------------------------
/book_view/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | book_view
7 |
8 |
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/book_view/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "book_view",
3 | "version": "1.0.0",
4 | "description": "A Vue.js project",
5 | "author": "",
6 | "private": true,
7 | "scripts": {
8 | "dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js",
9 | "start": "npm run dev",
10 | "unit": "jest --config test/unit/jest.conf.js --coverage",
11 | "e2e": "node test/e2e/runner.js",
12 | "test": "npm run unit && npm run e2e",
13 | "lint": "eslint --ext .js,.vue src test/unit test/e2e/specs",
14 | "build": "node build/build.js"
15 | },
16 | "dependencies": {
17 | "iview": "^3.4.2",
18 | "vue": "^2.5.2",
19 | "vue-resource": "^1.5.1",
20 | "vue-router": "^3.0.1"
21 | },
22 | "devDependencies": {
23 | "autoprefixer": "^7.1.2",
24 | "babel-core": "^6.22.1",
25 | "babel-eslint": "^8.2.1",
26 | "babel-helper-vue-jsx-merge-props": "^2.0.3",
27 | "babel-jest": "^21.0.2",
28 | "babel-loader": "^7.1.1",
29 | "babel-plugin-dynamic-import-node": "^1.2.0",
30 | "babel-plugin-syntax-jsx": "^6.18.0",
31 | "babel-plugin-transform-es2015-modules-commonjs": "^6.26.0",
32 | "babel-plugin-transform-runtime": "^6.22.0",
33 | "babel-plugin-transform-vue-jsx": "^3.5.0",
34 | "babel-preset-env": "^1.3.2",
35 | "babel-preset-stage-2": "^6.22.0",
36 | "babel-register": "^6.22.0",
37 | "chalk": "^2.0.1",
38 | "chromedriver": "^2.27.2",
39 | "copy-webpack-plugin": "^4.0.1",
40 | "cross-spawn": "^5.0.1",
41 | "css-loader": "^0.28.0",
42 | "eslint": "^4.15.0",
43 | "eslint-config-standard": "^10.2.1",
44 | "eslint-friendly-formatter": "^3.0.0",
45 | "eslint-loader": "^1.7.1",
46 | "eslint-plugin-import": "^2.7.0",
47 | "eslint-plugin-node": "^5.2.0",
48 | "eslint-plugin-promise": "^3.4.0",
49 | "eslint-plugin-standard": "^3.0.1",
50 | "eslint-plugin-vue": "^4.0.0",
51 | "extract-text-webpack-plugin": "^3.0.0",
52 | "file-loader": "^1.1.4",
53 | "friendly-errors-webpack-plugin": "^1.6.1",
54 | "html-webpack-plugin": "^2.30.1",
55 | "jest": "^22.0.4",
56 | "jest-serializer-vue": "^0.3.0",
57 | "nightwatch": "^0.9.12",
58 | "node-notifier": "^5.1.2",
59 | "optimize-css-assets-webpack-plugin": "^3.2.0",
60 | "ora": "^1.2.0",
61 | "portfinder": "^1.0.13",
62 | "postcss-import": "^11.0.0",
63 | "postcss-loader": "^2.0.8",
64 | "postcss-url": "^7.2.1",
65 | "rimraf": "^2.6.0",
66 | "selenium-server": "^3.0.1",
67 | "semver": "^5.3.0",
68 | "shelljs": "^0.7.6",
69 | "uglifyjs-webpack-plugin": "^1.1.1",
70 | "url-loader": "^0.5.8",
71 | "vue-jest": "^1.0.2",
72 | "vue-loader": "^13.3.0",
73 | "vue-style-loader": "^3.0.1",
74 | "vue-template-compiler": "^2.5.2",
75 | "webpack": "^3.6.0",
76 | "webpack-bundle-analyzer": "^2.9.0",
77 | "webpack-dev-server": "^2.9.1",
78 | "webpack-merge": "^4.1.0"
79 | },
80 | "engines": {
81 | "node": ">= 6.0.0",
82 | "npm": ">= 3.0.0"
83 | },
84 | "browserslist": [
85 | "> 1%",
86 | "last 2 versions",
87 | "not ie <= 8"
88 | ]
89 | }
90 |
--------------------------------------------------------------------------------
/book_view/src/App.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
13 |
14 |
24 |
--------------------------------------------------------------------------------
/book_view/src/assets/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wangjun1996/VueMovieWebsite/31b11000a973ea36fd0e8b2b84af759534114a7f/book_view/src/assets/logo.png
--------------------------------------------------------------------------------
/book_view/src/components/AdminMenu.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
58 |
59 |
60 |
61 |
74 |
75 |
78 |
--------------------------------------------------------------------------------
/book_view/src/components/Comment.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
已审核的评论
5 |
6 |
11 |
12 |
13 |
14 |
15 |
16 | 评论
17 |
18 |
19 |
20 |
21 |
74 |
75 |
80 |
--------------------------------------------------------------------------------
/book_view/src/components/CommonFooter.vue:
--------------------------------------------------------------------------------
1 |
2 |
13 |
14 |
15 |
20 |
21 |
38 |
--------------------------------------------------------------------------------
/book_view/src/components/HelloWorld.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
{{ msg }}
4 |
Essential Links
5 |
48 |
Ecosystem
49 |
83 |
84 |
85 |
86 |
96 |
97 |
98 |
114 |
--------------------------------------------------------------------------------
/book_view/src/components/IndexHeaderPic.vue:
--------------------------------------------------------------------------------
1 |
2 |
10 |
11 |
12 |
19 |
20 |
39 |
--------------------------------------------------------------------------------
/book_view/src/components/MovieIndexHeader.vue:
--------------------------------------------------------------------------------
1 |
2 |
19 |
20 |
21 |
26 |
--------------------------------------------------------------------------------
/book_view/src/components/MoviesList.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | {{movieName}} : {{movieTimeShow}}
6 |
7 |
8 |
9 |
10 |
11 |
25 |
26 |
33 |
--------------------------------------------------------------------------------
/book_view/src/components/NewsList.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | {{articleTitle}}
7 | {{articleTime}}
8 |
9 |
10 |
11 |
12 |
13 |
14 |
24 |
25 |
32 |
--------------------------------------------------------------------------------
/book_view/src/components/UserInfo.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
个人信息
4 |
5 |
6 |
7 | 用户名: |
8 | {{detail.username}} |
9 |
10 |
11 | 邮箱: |
12 | {{detail.userMail}} |
13 |
14 |
15 | 电话: |
16 | {{detail.userPhone}} |
17 |
18 |
19 | 用户身份: |
20 | {{userAdmin}} |
21 |
22 |
23 | 用户权限: |
24 | {{userPower}} |
25 |
26 |
27 | 用户状态: |
28 | {{userStatus}} |
29 |
30 |
31 |
32 |
33 |
34 |
78 |
79 |
87 |
--------------------------------------------------------------------------------
/book_view/src/components/UserMessage.vue:
--------------------------------------------------------------------------------
1 |
2 |
11 |
23 |
24 |
25 |
64 |
65 |
82 |
--------------------------------------------------------------------------------
/book_view/src/main.js:
--------------------------------------------------------------------------------
1 | // The Vue build version to load with the `import` command
2 | // (runtime-only or standalone) has been set in webpack.base.conf with an alias.
3 | import Vue from 'vue'
4 | import App from './App'
5 | import router from './router'
6 | import iView from 'iview'
7 | import 'iview/dist/styles/iview.css'
8 |
9 | Vue.config.productionTip = false
10 |
11 | Vue.use(iView)
12 |
13 | /* eslint-disable no-new */
14 | new Vue({
15 | el: '#app',
16 | router,
17 | components: { App },
18 | template: ''
19 | })
20 |
--------------------------------------------------------------------------------
/book_view/src/pages/admin.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
34 |
35 |
38 |
--------------------------------------------------------------------------------
/book_view/src/pages/adminAddArticle.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
109 |
110 |
122 |
--------------------------------------------------------------------------------
/book_view/src/pages/adminAddMovie.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
添加电影
15 |
16 |
17 |
18 | 电影名称: |
19 |
20 |
21 |
22 |
23 | |
24 |
25 |
26 | 电影图片地址: |
27 |
28 |
29 |
30 |
31 | |
32 |
33 |
34 | 电影预告片地址: |
35 |
36 |
37 |
38 |
39 | |
40 |
41 |
42 | 电影播放地址: |
43 |
44 |
45 |
46 |
47 | |
48 |
49 |
50 | 电影上映日期: |
51 |
52 |
53 |
54 |
55 | |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 | 是否在主页显示该电影: |
75 |
76 |
77 | 否
78 | 是
79 |
80 | |
81 |
82 |
83 |
84 |
85 | 添加
86 | |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
161 |
162 |
174 |
--------------------------------------------------------------------------------
/book_view/src/pages/adminArticleList.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 | 影评列表
14 |
15 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
288 |
289 |
292 |
--------------------------------------------------------------------------------
/book_view/src/pages/adminCommentList.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 | 评论列表
14 |
15 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
255 |
256 |
259 |
--------------------------------------------------------------------------------
/book_view/src/pages/adminMovieList.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 | 电影列表
14 |
15 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
343 |
344 |
347 |
--------------------------------------------------------------------------------
/book_view/src/pages/adminUserList.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 | 用户列表
14 |
15 |
16 |
17 | {{ row._id }}
18 |
19 |
20 |
21 | {{ row.username.length <= 18 ? row.username : row.username.substring(0, 18) + '...'}}
22 |
23 |
24 |
25 | {{ row.password.length <= 30 ? row.password : row.password.substring(0, 25) + '...'}}
26 |
27 |
28 |
29 | {{ row.userMail }}
30 |
31 |
32 |
33 | {{ row.userPhone }}
34 |
35 |
36 |
37 |
40 |
41 | {{ row.userAdmin }}
42 |
43 |
44 |
45 |
48 |
49 | {{ row.userPower }}
50 |
51 |
52 |
53 | {{ row.userStop }}
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
420 |
421 |
424 |
--------------------------------------------------------------------------------
/book_view/src/pages/forgetPassword.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
设置新密码
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 | 验证信息
27 |
28 |
29 |
30 |
设置新密码
31 |
32 |
33 |
34 |
35 |
36 |
37 | 确认
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
101 |
102 |
110 |
--------------------------------------------------------------------------------
/book_view/src/pages/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 | 热映电影
18 |
19 |
22 |
23 |
24 |
25 |
26 |
27 | 最新影评
28 |
29 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
77 |
78 |
106 |
--------------------------------------------------------------------------------
/book_view/src/pages/loginPage.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
用户登录
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 | 登录
23 | 注册
24 | 忘记密码
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
83 |
84 |
96 |
--------------------------------------------------------------------------------
/book_view/src/pages/movieDetail.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
{{detail.movieName}}
9 |
上映日期:{{detail.movieTime}}
10 |
预告片:{{detail.movieVideo}}
11 |
观看次数:{{detail.movieNumDownload}}
12 |
点赞次数:{{detail.movieNumSuppose}}
13 |
14 |
15 |
16 |
17 |
18 | 观看
19 | 点赞
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
89 |
90 |
112 |
--------------------------------------------------------------------------------
/book_view/src/pages/moviesList.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 | 电影列表
11 |
12 |
13 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
45 |
46 |
59 |
--------------------------------------------------------------------------------
/book_view/src/pages/newsDetail.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
{{detail.articleTitle}}
8 |
{{detail.articleTime}}
9 |
{{detail.articleContext}}
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
43 |
44 |
58 |
--------------------------------------------------------------------------------
/book_view/src/pages/newsList.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 | 影评列表
11 |
12 |
13 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
45 |
46 |
59 |
--------------------------------------------------------------------------------
/book_view/src/pages/registerPage.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
用户注册
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 | 注册
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
97 |
98 |
110 |
--------------------------------------------------------------------------------
/book_view/src/pages/userInfo.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
个人信息
7 |
8 |
9 |
10 | 用户名: |
11 | {{detail.username}} |
12 |
13 |
14 | 邮箱: |
15 | {{detail.userMail}} |
16 |
17 |
18 | 电话: |
19 | {{detail.userPhone}} |
20 |
21 |
22 | 用户身份: |
23 | {{userAdmin}} |
24 |
25 |
26 | 用户状态: |
27 | {{userStatus}} |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
83 |
84 |
94 |
--------------------------------------------------------------------------------
/book_view/src/router/index.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue'
2 | import Router from 'vue-router'
3 | import VueRource from 'vue-resource'
4 | // import IndexPage from '../pages/index.vue'
5 | // import HelloWorld from '@/components/HelloWorld'
6 | import MovieList from '../pages/moviesList.vue'
7 | import MovieDetail from '../pages/movieDetail.vue'
8 | import NewsDetail from '../pages/newsDetail.vue'
9 | import LoginPage from '../pages/loginPage.vue'
10 | import RegisterPage from '../pages/registerPage.vue'
11 | import ForgetPassword from '../pages/forgetPassword.vue'
12 | import UserInfo from '../pages/userInfo.vue'
13 | import NewsList from '../pages/newsList.vue'
14 | import Admin from '../pages/admin.vue'
15 | import AdminMovieList from '../pages/adminMovieList.vue'
16 | import AdminAddMovie from '../pages/adminAddMovie.vue'
17 | import AdminArticleList from '../pages/adminArticleList.vue'
18 | import AdminAddArticle from '../pages/adminAddArticle.vue'
19 | import AdminCommentList from '../pages/adminCommentList.vue'
20 | import AdminUserList from '../pages/adminUserList.vue'
21 |
22 | Vue.use(Router)
23 | Vue.use(VueRource)
24 |
25 | export default new Router({
26 | routes: [
27 | {
28 | path: '/',
29 | component: resolve => require(['../pages/index'], resolve),
30 | meta: {
31 | title: 'home'
32 | }
33 | },
34 | {
35 | path: '/movieList',
36 | component: MovieList
37 | },
38 | {
39 | path: '/movieDetail',
40 | component: MovieDetail
41 | },
42 | {
43 | path: '/newsList',
44 | component: NewsList
45 | },
46 | {
47 | path: '/newsDetail',
48 | component: NewsDetail
49 | },
50 | {
51 | path: '/loginPage',
52 | component: LoginPage
53 | },
54 | {
55 | path: '/registerPage',
56 | component: RegisterPage
57 | },
58 | {
59 | path: '/forgetPassword',
60 | component: ForgetPassword
61 | },
62 | {
63 | path: '/userInfo',
64 | component: UserInfo
65 | },
66 | {
67 | path: '/admin',
68 | component: Admin
69 | },
70 | {
71 | path: '/adminMovieList',
72 | component: AdminMovieList
73 | },
74 | {
75 | path: '/adminAddMovie',
76 | component: AdminAddMovie
77 | },
78 | {
79 | path: '/adminArticleList',
80 | component: AdminArticleList
81 | },
82 | {
83 | path: '/adminAddArticle',
84 | component: AdminAddArticle
85 | },
86 | {
87 | path: '/adminCommentList',
88 | component: AdminCommentList
89 | },
90 | {
91 | path: '/adminUserList',
92 | component: AdminUserList
93 | }
94 | ]
95 | })
96 |
--------------------------------------------------------------------------------
/book_view/static/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wangjun1996/VueMovieWebsite/31b11000a973ea36fd0e8b2b84af759534114a7f/book_view/static/.gitkeep
--------------------------------------------------------------------------------
/book_view/test/e2e/custom-assertions/elementCount.js:
--------------------------------------------------------------------------------
1 | // A custom Nightwatch assertion.
2 | // The assertion name is the filename.
3 | // Example usage:
4 | //
5 | // browser.assert.elementCount(selector, count)
6 | //
7 | // For more information on custom assertions see:
8 | // http://nightwatchjs.org/guide#writing-custom-assertions
9 |
10 | exports.assertion = function (selector, count) {
11 | this.message = 'Testing if element <' + selector + '> has count: ' + count
12 | this.expected = count
13 | this.pass = function (val) {
14 | return val === this.expected
15 | }
16 | this.value = function (res) {
17 | return res.value
18 | }
19 | this.command = function (cb) {
20 | var self = this
21 | return this.api.execute(function (selector) {
22 | return document.querySelectorAll(selector).length
23 | }, [selector], function (res) {
24 | cb.call(self, res)
25 | })
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/book_view/test/e2e/nightwatch.conf.js:
--------------------------------------------------------------------------------
1 | require('babel-register')
2 | var config = require('../../config')
3 |
4 | // http://nightwatchjs.org/gettingstarted#settings-file
5 | module.exports = {
6 | src_folders: ['test/e2e/specs'],
7 | output_folder: 'test/e2e/reports',
8 | custom_assertions_path: ['test/e2e/custom-assertions'],
9 |
10 | selenium: {
11 | start_process: true,
12 | server_path: require('selenium-server').path,
13 | host: '127.0.0.1',
14 | port: 4444,
15 | cli_args: {
16 | 'webdriver.chrome.driver': require('chromedriver').path
17 | }
18 | },
19 |
20 | test_settings: {
21 | default: {
22 | selenium_port: 4444,
23 | selenium_host: 'localhost',
24 | silent: true,
25 | globals: {
26 | devServerURL: 'http://localhost:' + (process.env.PORT || config.dev.port)
27 | }
28 | },
29 |
30 | chrome: {
31 | desiredCapabilities: {
32 | browserName: 'chrome',
33 | javascriptEnabled: true,
34 | acceptSslCerts: true
35 | }
36 | },
37 |
38 | firefox: {
39 | desiredCapabilities: {
40 | browserName: 'firefox',
41 | javascriptEnabled: true,
42 | acceptSslCerts: true
43 | }
44 | }
45 | }
46 | }
47 |
--------------------------------------------------------------------------------
/book_view/test/e2e/runner.js:
--------------------------------------------------------------------------------
1 | // 1. start the dev server using production config
2 | process.env.NODE_ENV = 'testing'
3 |
4 | const webpack = require('webpack')
5 | const DevServer = require('webpack-dev-server')
6 |
7 | const webpackConfig = require('../../build/webpack.prod.conf')
8 | const devConfigPromise = require('../../build/webpack.dev.conf')
9 |
10 | let server
11 |
12 | devConfigPromise.then(devConfig => {
13 | const devServerOptions = devConfig.devServer
14 | const compiler = webpack(webpackConfig)
15 | server = new DevServer(compiler, devServerOptions)
16 | const port = devServerOptions.port
17 | const host = devServerOptions.host
18 | return server.listen(port, host)
19 | })
20 | .then(() => {
21 | // 2. run the nightwatch test suite against it
22 | // to run in additional browsers:
23 | // 1. add an entry in test/e2e/nightwatch.conf.js under "test_settings"
24 | // 2. add it to the --env flag below
25 | // or override the environment flag, for example: `npm run e2e -- --env chrome,firefox`
26 | // For more information on Nightwatch's config file, see
27 | // http://nightwatchjs.org/guide#settings-file
28 | let opts = process.argv.slice(2)
29 | if (opts.indexOf('--config') === -1) {
30 | opts = opts.concat(['--config', 'test/e2e/nightwatch.conf.js'])
31 | }
32 | if (opts.indexOf('--env') === -1) {
33 | opts = opts.concat(['--env', 'chrome'])
34 | }
35 |
36 | const spawn = require('cross-spawn')
37 | const runner = spawn('./node_modules/.bin/nightwatch', opts, { stdio: 'inherit' })
38 |
39 | runner.on('exit', function (code) {
40 | server.close()
41 | process.exit(code)
42 | })
43 |
44 | runner.on('error', function (err) {
45 | server.close()
46 | throw err
47 | })
48 | })
49 |
--------------------------------------------------------------------------------
/book_view/test/e2e/specs/test.js:
--------------------------------------------------------------------------------
1 | // For authoring Nightwatch tests, see
2 | // http://nightwatchjs.org/guide#usage
3 |
4 | module.exports = {
5 | 'default e2e tests': function (browser) {
6 | // automatically uses dev Server port from /config.index.js
7 | // default: http://localhost:8080
8 | // see nightwatch.conf.js
9 | const devServer = browser.globals.devServerURL
10 |
11 | browser
12 | .url(devServer)
13 | .waitForElementVisible('#app', 5000)
14 | .assert.elementPresent('.hello')
15 | .assert.containsText('h1', 'Welcome to Your Vue.js App')
16 | .assert.elementCount('img', 1)
17 | .end()
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/book_view/test/unit/.eslintrc:
--------------------------------------------------------------------------------
1 | {
2 | "env": {
3 | "jest": true
4 | },
5 | "globals": {
6 | }
7 | }
8 |
--------------------------------------------------------------------------------
/book_view/test/unit/jest.conf.js:
--------------------------------------------------------------------------------
1 | const path = require('path')
2 |
3 | module.exports = {
4 | rootDir: path.resolve(__dirname, '../../'),
5 | moduleFileExtensions: [
6 | 'js',
7 | 'json',
8 | 'vue'
9 | ],
10 | moduleNameMapper: {
11 | '^@/(.*)$': '/src/$1'
12 | },
13 | transform: {
14 | '^.+\\.js$': '/node_modules/babel-jest',
15 | '.*\\.(vue)$': '/node_modules/vue-jest'
16 | },
17 | testPathIgnorePatterns: [
18 | '/test/e2e'
19 | ],
20 | snapshotSerializers: ['/node_modules/jest-serializer-vue'],
21 | setupFiles: ['/test/unit/setup'],
22 | mapCoverage: true,
23 | coverageDirectory: '/test/unit/coverage',
24 | collectCoverageFrom: [
25 | 'src/**/*.{js,vue}',
26 | '!src/main.js',
27 | '!src/router/index.js',
28 | '!**/node_modules/**'
29 | ]
30 | }
31 |
--------------------------------------------------------------------------------
/book_view/test/unit/setup.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue'
2 |
3 | Vue.config.productionTip = false
4 |
--------------------------------------------------------------------------------
/book_view/test/unit/specs/HelloWorld.spec.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue'
2 | import HelloWorld from '@/components/HelloWorld'
3 |
4 | describe('HelloWorld.vue', () => {
5 | it('should render correct contents', () => {
6 | const Constructor = Vue.extend(HelloWorld)
7 | const vm = new Constructor().$mount()
8 | expect(vm.$el.querySelector('.hello h1').textContent)
9 | .toEqual('Welcome to Your Vue.js App')
10 | })
11 | })
12 |
--------------------------------------------------------------------------------
/database/json/comments.json:
--------------------------------------------------------------------------------
1 | {
2 | "_id" : ObjectId("5d0897e03364a61d1c8c0621"),
3 | "movie_id" : "5d09e9d3dfb8dc3494d45020",
4 | "username" : "匿名用户",
5 | "context" : "zhenhaokan",
6 | "check" : true,
7 | "__v" : NumberInt(0)
8 | }
9 | {
10 | "_id" : ObjectId("5d08985d548f9400cc3b699a"),
11 | "movie_id" : "5d09e9d3dfb8dc3494d45020",
12 | "username" : "wj",
13 | "context" : "zhenhaokan",
14 | "check" : false,
15 | "__v" : NumberInt(0)
16 | }
17 | {
18 | "_id" : ObjectId("5d103b13c4984f1f68e08839"),
19 | "movie_id" : "5d09e93cdfb8dc3494d4501e",
20 | "username" : "wj",
21 | "context" : "评论测试",
22 | "check" : false,
23 | "__v" : NumberInt(0)
24 | }
25 | {
26 | "_id" : ObjectId("5d10404699302109a07c4b6e"),
27 | "movie_id" : "5d09e9d3dfb8dc3494d45020",
28 | "username" : "匿名用户",
29 | "context" : "牛逼!!!好音乐真是颗幸福的原子弹!",
30 | "check" : true,
31 | "__v" : NumberInt(0)
32 | }
33 | {
34 | "_id" : ObjectId("5d10405099302109a07c4b6f"),
35 | "movie_id" : "5d09e9d3dfb8dc3494d45020",
36 | "username" : "匿名用户",
37 | "context" : "这是我今年最喜欢的电影,没有之一。",
38 | "check" : true,
39 | "__v" : NumberInt(0)
40 | }
41 | {
42 | "_id" : ObjectId("5d10425299302109a07c4b71"),
43 | "movie_id" : "5d09bb49b831750d82886ce5",
44 | "username" : "匿名用户",
45 | "context" : "雷洛加跛豪,王晶这回没有玩贱而是难得严肃了一回,整体制作非常老港片的味道,老派枭雄电影的感觉。刘德华果然是越来越有型了。",
46 | "check" : true,
47 | "__v" : NumberInt(0)
48 | }
49 | {
50 | "_id" : ObjectId("5d1043c999302109a07c4b72"),
51 | "movie_id" : "5d09bb49b831750d82886ce5",
52 | "username" : "匿名用户",
53 | "context" : "王晶开辟了一个新类型——民族主义黑帮片。此片可作为新世纪后殖民主义港片的代表作,与具有分裂倾向的港毒片近身肉搏。",
54 | "check" : true,
55 | "__v" : NumberInt(0)
56 | }
57 | {
58 | "_id" : ObjectId("5d10448f99302109a07c4b73"),
59 | "movie_id" : "5d09bb49b831750d82886ce5",
60 | "username" : "匿名用户",
61 | "context" : "江湖鱼龙混杂,如今尽是鱼虾。龙已飞天而去,任尔泥沙俱下。",
62 | "check" : false,
63 | "__v" : NumberInt(0)
64 | }
65 | {
66 | "_id" : ObjectId("5d104a164b22ce100847e887"),
67 | "movie_id" : "5d09c057b831750d82886d3b",
68 | "username" : "匿名用户",
69 | "context" : "黄渤是有追求的导演,之前真没敢报期望。中国式反乌托邦,以为会是麻花式的喜剧,会在老本行上偷懒,但远远挖掘了更深层次的东西,这对于处女作来说实属不易。体制内无法呈现的阴暗面,以巧妙的抉择呈现,效果惊艳。美术、音乐以及表演掌控自如,恭喜黄渤!",
70 | "check" : true,
71 | "__v" : NumberInt(0)
72 | }
73 | {
74 | "_id" : ObjectId("5d104a264b22ce100847e888"),
75 | "movie_id" : "5d09c057b831750d82886d3b",
76 | "username" : "匿名用户",
77 | "context" : "真·一出好戏。剧情表演俱佳,求生模式的暗黑剧情扣人心弦,群戏表演很见功力。最意外张艺兴表演,黑化得很酷了;舒淇一如既往美如画。船舱倒立视角印象深刻,表现力和寓言性十足",
78 | "check" : true,
79 | "__v" : NumberInt(0)
80 | }
81 | {
82 | "_id" : ObjectId("5d10a0afdc89001d9c6986a1"),
83 | "movie_id" : "5d09bb49b831750d82886ce5",
84 | "username" : "wj",
85 | "context" : "犹记得当年看雷洛传,王晶不拍贺岁尬喜剧的时候,成熟的功底,配乐就凸现了。甚至还玩起了长镜头。主角配角皆有演技,真的是太久太久没见这样纯正怀旧的港片了。",
86 | "check" : true,
87 | "__v" : NumberInt(0)
88 | }
89 | {
90 | "_id" : ObjectId("5d10a0e8dc89001d9c6986a2"),
91 | "movie_id" : "5d09e9d3dfb8dc3494d45020",
92 | "username" : "wj",
93 | "context" : "神!最后一场戏,基本还原了当年皇后乐队在live aid演唱会的盛况,曲目百分之八十保留,还有龅牙叔献给母亲的那个吻。",
94 | "check" : true,
95 | "__v" : NumberInt(0)
96 | }
97 | {
98 | "_id" : ObjectId("5d10a112dc89001d9c6986a3"),
99 | "movie_id" : "5d0a1b9414cd341520ce1885",
100 | "username" : "wj",
101 | "context" : "当熟悉的音符如电流般直抵高潮,纯粹的角色塑造显得无足轻重,对你,摇滚传奇Freddie Mercury而言,再没有比歌声更精确的人格注脚了。 一成不变的天空,偶尔会有燃烧的陨星击穿云层,即兴地闪耀,清脆地焚毁,散成光艳袭人的碎片,巡游在历史里,巡游在半空,被人呼吸,被不同的时代回忆。",
102 | "check" : true,
103 | "__v" : NumberInt(0)
104 | }
105 | {
106 | "_id" : ObjectId("5d10a138dc89001d9c6986a4"),
107 | "movie_id" : "5d09c102b831750d82886d46",
108 | "username" : "wj",
109 | "context" : "“如果再也不能见到你,祝你早安,午安和晚安。”",
110 | "check" : true,
111 | "__v" : NumberInt(0)
112 | }
113 | {
114 | "_id" : ObjectId("5d10e8b5e00958339483960b"),
115 | "movie_id" : "5d09e93cdfb8dc3494d4501e",
116 | "username" : "yjp",
117 | "context" : "666",
118 | "check" : true,
119 | "__v" : NumberInt(0)
120 | }
121 | {
122 | "_id" : ObjectId("5d11a7a57caf172090b85919"),
123 | "movie_id" : "5d09e9d3dfb8dc3494d45020",
124 | "username" : "匿名用户",
125 | "context" : "yjp",
126 | "check" : true,
127 | "__v" : NumberInt(0)
128 | }
129 | {
130 | "_id" : ObjectId("5d122d4f7b666626c08a9a80"),
131 | "movie_id" : "5d09e9d3dfb8dc3494d45020",
132 | "username" : "wj",
133 | "context" : "真好看!看的热血沸腾!",
134 | "check" : true,
135 | "__v" : NumberInt(0)
136 | }
137 | {
138 | "_id" : ObjectId("5d12ef2dc7a167206070256f"),
139 | "movie_id" : "5d09c102b831750d82886d46",
140 | "username" : "wj",
141 | "context" : "打开这道门,即便现实再最肮脏也请让我自己感受!关掉你的镜头,即使现实再无奈你也必须自己体验!",
142 | "check" : true,
143 | "__v" : NumberInt(0)
144 | }
145 | {
146 | "_id" : ObjectId("5d12f01ac7a1672060702571"),
147 | "movie_id" : "5d09c057b831750d82886d3b",
148 | "username" : "test",
149 | "context" : "荒诞中揭示人性,导演处女作应该说太用心了,简直就是想费力而不只是想讨好(巧)观众;场景和特效都非常认真,荒岛,破船的造型……电影就是高度文明的人再退回到猴子原始时代的现代寓言,这也足见一个酝酿多年的演而优则导的处女作的良苦『野心』,如果多一些这样的的导演,那么我们的国产電影好看了",
150 | "check" : true,
151 | "__v" : NumberInt(0)
152 | }
153 | {
154 | "_id" : ObjectId("5d12f0d1c7a1672060702575"),
155 | "movie_id" : "5d0a1b9414cd341520ce1885",
156 | "username" : "匿名用户",
157 | "context" : "666",
158 | "check" : true,
159 | "__v" : NumberInt(0)
160 | }
161 | {
162 | "_id" : ObjectId("5d138f896491ab2ea0f80efa"),
163 | "movie_id" : "5d12eaa582f1d1537b57e3f2",
164 | "username" : "匿名用户",
165 | "context" : "666",
166 | "check" : true,
167 | "__v" : NumberInt(0)
168 | }
169 | {
170 | "_id" : ObjectId("5d24610b33b1f42c9c1de628"),
171 | "movie_id" : "5d09e93cdfb8dc3494d4501e",
172 | "username" : "wj",
173 | "context" : "国产科幻巨作!",
174 | "check" : true,
175 | "__v" : NumberInt(0)
176 | }
177 |
--------------------------------------------------------------------------------
/database/json/mails.json:
--------------------------------------------------------------------------------
1 | {
2 | "_id" : ObjectId("5d09a3a7405d8131cc61dc8a"),
3 | "fromUser" : "5d08883f78394b28d4b2c331",
4 | "toUser" : "5d08990b8fadcc259091fd5e",
5 | "title" : "站内信标题1",
6 | "context" : "站内信内容1",
7 | "date" : "2019-6-19 10:53:27 AM",
8 | "__v" : NumberInt(0)
9 | }
10 | {
11 | "_id" : ObjectId("5d09a3b1405d8131cc61dc8b"),
12 | "fromUser" : "5d08883f78394b28d4b2c331",
13 | "toUser" : "5d08990b8fadcc259091fd5e",
14 | "title" : "站内信标题2",
15 | "context" : "站内信内容2",
16 | "date" : "2019-6-19 10:53:37 AM",
17 | "__v" : NumberInt(0)
18 | }
19 | {
20 | "_id" : ObjectId("5d09a3d7405d8131cc61dc8c"),
21 | "fromUser" : "5d08883f78394b28d4b2c331",
22 | "toUser" : "5d08888e0fc324056011da74",
23 | "title" : "站内信标题3",
24 | "context" : "站内信内容3",
25 | "date" : "2019-6-19 10:54:15 AM",
26 | "__v" : NumberInt(0)
27 | }
28 | {
29 | "_id" : ObjectId("5d09a5d2405d8131cc61dc8d"),
30 | "fromUser" : "5d08883f78394b28d4b2c331",
31 | "toUser" : "5d08883f78394b28d4b2c331",
32 | "title" : "站内信标题4",
33 | "context" : "站内信内容4",
34 | "date" : "2019-6-19 11:02:42 AM",
35 | "__v" : NumberInt(0)
36 | }
37 |
--------------------------------------------------------------------------------
/database/json/movies.json:
--------------------------------------------------------------------------------
1 | {
2 | "_id" : ObjectId("5d09bb49b831750d82886ce5"),
3 | "movieName" : "追龙",
4 | "movieImg" : "https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1562675565641&di=7b170c5348b2083d5f75334edb2605d9&imgtype=0&src=http%3A%2F%2Fi1.wp.com%2Fimg.char.tw%2Fuploads%2F20181025172743_28.jpg%3Fresize%3D1600%2C905",
5 | "movieVideo" : "https://movie.douban.com/trailer/221961/#content",
6 | "movieDownload" : "https://www.iqiyi.com/v_19rr8ya20o.html",
7 | "movieTime" : "2019-06-19",
8 | "movieNumSuppose" : NumberInt(123),
9 | "movieNumDownload" : NumberInt(3276),
10 | "movieMainPage" : false
11 | }
12 | {
13 | "_id" : ObjectId("5d09e93cdfb8dc3494d4501e"),
14 | "movieName" : "流浪地球",
15 | "movieImg" : "https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1561381917376&di=fa554b8ff198ebff910afb548dd5b50f&imgtype=0&src=http%3A%2F%2Fi1.hdslb.com%2Fbfs%2Farchive%2F095e7b89daf78e084d452e11f1695fb821eda0ab.jpg",
16 | "movieVideo" : "https://movie.douban.com/video/102604/",
17 | "movieDownload" : "https://www.iqiyi.com/v_19rrfe142o.html",
18 | "movieTime" : "2019-02-05",
19 | "movieNumSuppose" : NumberInt(1209),
20 | "movieNumDownload" : NumberInt(5767),
21 | "movieMainPage" : true,
22 | "__v" : NumberInt(0)
23 | }
24 | {
25 | "_id" : ObjectId("5d09e9d3dfb8dc3494d45020"),
26 | "movieName" : "波西米亚狂想曲 Bohemian Rhapsody",
27 | "movieImg" : "https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1562675635155&di=f335823bbf1008f8f7feac7ddcd71da3&imgtype=0&src=http%3A%2F%2Fi0.hdslb.com%2Fbfs%2Farticle%2Ffd0dd653bec8c800c62d3e219dd3eaf512018d6b.jpg",
28 | "movieVideo" : "https://movie.douban.com/trailer/233799/#content",
29 | "movieDownload" : "https://www.douban.com/link2/?url=http%3A%2F%2Fwww.iqiyi.com%2Fv_19rqycwafc.html%3Fvfm%3Dm_331_dbdy%26fv%3D4904d94982104144a1548dd9040df241&subtype=9&type=online-video",
30 | "movieTime" : "2019-03-22",
31 | "movieNumSuppose" : NumberInt(207),
32 | "movieNumDownload" : NumberInt(187),
33 | "movieMainPage" : false,
34 | "__v" : NumberInt(0)
35 | }
36 | {
37 | "_id" : ObjectId("5d10a45d7f0a541b8d9b3a9e"),
38 | "movieName" : "霸王别姬",
39 | "movieImg" : "https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1561381801142&di=515c7439d7a1a40be7587cad291b1b91&imgtype=0&src=http%3A%2F%2Fwww.fjsen.com%2Fimages%2Fattachement%2Fjpg%2Fsite1%2F2011-05-24%2F7775612759867346311.jpg",
40 | "movieVideo" : "https://movie.douban.com/trailer/239810/#content",
41 | "movieDownload" : "https://www.douban.com/link2/?url=http%3A%2F%2Fv.youku.com%2Fv_show%2Fid_XMzA1NTAzNjAwMA%3D%3D.html%3Ftpa%3DdW5pb25faWQ9MzAwMDA4XzEwMDAwMl8wMl8wMQ%26refer%3Ddoubanneirongshuchu_bd.xuyang01_douban_201122&subtype=3&type=online-video",
42 | "movieTime" : "1993-01-01",
43 | "movieNumSuppose" : NumberInt(1057),
44 | "movieNumDownload" : NumberInt(559),
45 | "movieMainPage" : false,
46 | "__v" : NumberInt(0)
47 | }
48 | {
49 | "_id" : ObjectId("5d122049518fc462f4d6b379"),
50 | "movieName" : "这个杀手不太冷 Léon (1994)",
51 | "movieImg" : "https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1562675691797&di=2dfa4fdd44f0d9d9ef29c1057e4dfa4f&imgtype=0&src=http%3A%2F%2Fhbimg.b0.upaiyun.com%2Ff5a2b2bfde0775a727615963e2387d50d1f4e5b53c5c3-O5cdIq_fw658",
52 | "movieVideo" : "https://movie.douban.com/trailer/108757/#content",
53 | "movieDownload" : "https://www.douban.com/link2/?url=https%3A%2F%2Fwww.bilibili.com%2Fbangumi%2Fplay%2Fss10945%3Fbsource%3Ddouban&subtype=8&type=online-video&link2key=8ff2af5937",
54 | "movieTime" : "1994-09-14",
55 | "movieNumSuppose" : NumberInt(589),
56 | "movieNumDownload" : NumberInt(240),
57 | "movieMainPage" : false,
58 | "__v" : NumberInt(0)
59 | }
60 | {
61 | "_id" : ObjectId("5d122093518fc462f4d6b38d"),
62 | "movieName" : "阿甘正传 Forrest Gump (1994)",
63 | "movieImg" : "https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1562675775405&di=a24753f4a0bdba7f46080830c6890a18&imgtype=0&src=http%3A%2F%2Fimg0.pconline.com.cn%2Fpconline%2F1205%2F07%2F2777169_13_thumb.jpg",
64 | "movieVideo" : "https://movie.douban.com/trailer/160000/#content",
65 | "movieDownload" : "https://www.douban.com/link2/?url=http%3A%2F%2Fv.qq.com%2Fx%2Fcover%2Fr6hc2kqgvnmiejn.html%3Fptag%3Ddouban.movie&subtype=1&type=online-video",
66 | "movieTime" : "1994-06-23",
67 | "movieNumSuppose" : NumberInt(1246),
68 | "movieNumDownload" : NumberInt(67),
69 | "movieMainPage" : false
70 | }
71 | {
72 | "_id" : ObjectId("5d12209b518fc462f4d6b38e"),
73 | "movieName" : "美丽人生 La vita è bella (1997)",
74 | "movieImg" : "https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1563270529&di=57e1613dcc9fd4c2a1d720e3ee9106c2&imgtype=jpg&er=1&src=http%3A%2F%2Fimg1.doubanio.com%2Fview%2Fnote%2Flarge%2Fpublic%2Fp39919097.jpg",
75 | "movieVideo" : "https://movie.douban.com/trailer/108759/#content",
76 | "movieDownload" : "https://www.douban.com/link2/?url=http%3A%2F%2Fwww.iqiyi.com%2Fv_19rrjqfdbc.html%3Fvfm%3Dm_331_dbdy%26fv%3D4904d94982104144a1548dd9040df241&subtype=9&type=online-video",
77 | "movieTime" : "1997-12-20",
78 | "movieNumSuppose" : NumberInt(5189),
79 | "movieNumDownload" : NumberInt(234),
80 | "movieMainPage" : false
81 | }
82 | {
83 | "_id" : ObjectId("5d1220aa518fc462f4d6b39e"),
84 | "movieName" : "泰坦尼克号 Titanic (1997)",
85 | "movieImg" : "https://ss0.bdstatic.com/70cFuHSh_Q1YnxGkpoWK1HF6hhy/it/u=4236395672,1233225696&fm=26&gp=0.jpg",
86 | "movieVideo" : "https://movie.douban.com/trailer/112229/#content",
87 | "movieDownload" : "https://www.douban.com/link2/?url=http%3A%2F%2Fv.qq.com%2Fx%2Fcover%2Ft5jqhgw8pix81mw.html%3Fptag%3Ddouban.movie&subtype=1&type=online-video",
88 | "movieTime" : "1998-04-03",
89 | "movieNumSuppose" : NumberInt(4567),
90 | "movieNumDownload" : NumberInt(1167),
91 | "movieMainPage" : false
92 | }
93 | {
94 | "_id" : ObjectId("5d1221b1518fc462f4d6b3e0"),
95 | "movieName" : "玩具总动员4 Toy Story 4 (2019)",
96 | "movieImg" : "https://img3.doubanio.com/view/photo/s_ratio_poster/public/p2557284230.webp",
97 | "movieVideo" : "https://movie.douban.com/trailer/247424/#content",
98 | "movieDownload" : "https://movie.douban.com/ticket/redirect/?url=https%3A%2F%2Fm.maoyan.com%2Fcinema%2Fmovie%2F246264%3F_v_%3Dyes%26merCode%3D1000011",
99 | "movieTime" : "2019-06-21",
100 | "movieNumSuppose" : NumberInt(345),
101 | "movieNumDownload" : NumberInt(34),
102 | "movieMainPage" : true
103 | }
104 | {
105 | "_id" : ObjectId("5d1221b4518fc462f4d6b3e1"),
106 | "movieName" : "哥斯拉2:怪兽之王 Godzilla: King of the Monsters (2019)",
107 | "movieImg" : "https://img3.doubanio.com/view/photo/s_ratio_poster/public/p2554370800.webp",
108 | "movieVideo" : "https://movie.douban.com/trailer/246166/#content",
109 | "movieDownload" : "https://movie.douban.com/ticket/redirect/?url=https%3A%2F%2Fm.maoyan.com%2Fcinema%2Fmovie%2F246061%3F_v_%3Dyes%26merCode%3D1000011",
110 | "movieTime" : "2019-05-31",
111 | "movieNumSuppose" : NumberInt(135),
112 | "movieNumDownload" : NumberInt(681),
113 | "movieMainPage" : true
114 | }
115 | {
116 | "_id" : ObjectId("5d1221b6518fc462f4d6b3e2"),
117 | "movieName" : "哆啦A梦:大雄的月球探险记 映画ドラえもん のび太の月面探査記 (2019)",
118 | "movieImg" : "https://img3.doubanio.com/view/photo/s_ratio_poster/public/p2557500825.webp",
119 | "movieVideo" : "https://movie.douban.com/trailer/247560/#content",
120 | "movieDownload" : "https://movie.douban.com/ticket/redirect/?url=https%3A%2F%2Fm.maoyan.com%2Fcinema%2Fmovie%2F1226516%3F_v_%3Dyes%26merCode%3D1000011",
121 | "movieTime" : "2019-06-01 ",
122 | "movieNumSuppose" : NumberInt(800),
123 | "movieNumDownload" : NumberInt(126),
124 | "movieMainPage" : true
125 | }
126 | {
127 | "_id" : ObjectId("5d1372c751f4d5138cb519f9"),
128 | "movieName" : "调音师 Andhadhun (2018)",
129 | "movieImg" : "https://img1.doubanio.com/view/photo/s_ratio_poster/public/p2551995207.webp",
130 | "movieVideo" : "https://movie.douban.com/trailer/244969/#content",
131 | "movieDownload" : "https://www.douban.com/link2/?url=https%3A%2F%2Fv.qq.com%2Fx%2Fcover%2F120m3xjxyr69vlz%2Fw0030ma4dhv.html&subtype=1&type=online-video",
132 | "movieTime" : "2019-04-03",
133 | "movieNumSuppose" : NumberInt(1214),
134 | "movieNumDownload" : NumberInt(115),
135 | "movieMainPage" : false,
136 | "__v" : NumberInt(0)
137 | }
138 | {
139 | "_id" : ObjectId("5d1376312c785a0ee8544818"),
140 | "movieName" : "大侦探皮卡丘 Pokémon Detective Pikachu (2019)",
141 | "movieImg" : "https://img1.doubanio.com/view/photo/s_ratio_poster/public/p2555538168.webp",
142 | "movieVideo" : "https://movie.douban.com/trailer/243768/#content",
143 | "movieDownload" : "https://movie.douban.com/ticket/redirect/?url=https%3A%2F%2Fm.maoyan.com%2Fcinema%2Fmovie%2F346629%3F_v_%3Dyes%26merCode%3D1000011",
144 | "movieTime" : "2019-05-10",
145 | "movieNumSuppose" : NumberInt(913),
146 | "movieNumDownload" : NumberInt(112),
147 | "movieMainPage" : false,
148 | "__v" : NumberInt(0)
149 | }
150 | {
151 | "_id" : ObjectId("5d1376d281c3ca3338e69ba0"),
152 | "movieName" : "阿丽塔:战斗天使 Alita: Battle Angel (2019)",
153 | "movieImg" : "https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1562675893720&di=047a70b46a73271a7dc62046b8bd298c&imgtype=0&src=http%3A%2F%2Fi2.hexun.com%2F2019-02-14%2F196132192.jpg",
154 | "movieVideo" : "https://movie.douban.com/trailer/241829/#content",
155 | "movieDownload" : "https://movie.douban.com/ticket/redirect/?url=https%3A%2F%2Fm.maoyan.com%2Fcinema%2Fmovie%2F346629%3F_v_%3Dyes%26merCode%3D1000011",
156 | "movieTime" : "2019-02-22",
157 | "movieNumSuppose" : NumberInt(96),
158 | "movieNumDownload" : NumberInt(123),
159 | "movieMainPage" : false,
160 | "__v" : NumberInt(0)
161 | }
162 | {
163 | "_id" : ObjectId("5d22cb60ddc37a0570118bd4"),
164 | "movieName" : "蜘蛛侠:英雄远征 Spider-Man: Far From Home (2019)",
165 | "movieImg" : "https://img3.doubanio.com/view/photo/s_ratio_poster/public/p2558293106.webp",
166 | "movieVideo" : "https://movie.douban.com/trailer/248749/#content",
167 | "movieDownload" : "https://movie.douban.com/ticket/redirect/?url=https%3A%2F%2Fm.maoyan.com%2Fcinema%2Fmovie%2F1198925%3F_v_%3Dyes%26merCode%3D1000011",
168 | "movieTime" : "2019-06-28",
169 | "movieNumSuppose" : NumberInt(168),
170 | "movieNumDownload" : NumberInt(116),
171 | "movieMainPage" : true,
172 | "__v" : NumberInt(0)
173 | }
174 | {
175 | "_id" : ObjectId("5d22cb79ddc37a0570118bd5"),
176 | "movieName" : "扫毒2天地对决 (2019)",
177 | "movieImg" : "https://img3.doubanio.com/view/photo/s_ratio_poster/public/p2561172733.webp",
178 | "movieVideo" : "https://movie.douban.com/trailer/249286/#content",
179 | "movieDownload" : "https://movie.douban.com/subject/30171425/?from=showing",
180 | "movieTime" : "2019-07-05",
181 | "movieNumSuppose" : NumberInt(516),
182 | "movieNumDownload" : NumberInt(1121),
183 | "movieMainPage" : true,
184 | "__v" : NumberInt(0)
185 | }
186 | {
187 | "_id" : ObjectId("5d22cc145475453330a94b31"),
188 | "movieName" : "毒液:致命守护者 Venom (2018)",
189 | "movieImg" : "https://img3.doubanio.com/view/photo/l/public/p2537158013.webp",
190 | "movieVideo" : "https://movie.douban.com/trailer/238802/#content",
191 | "movieDownload" : "https://www.douban.com/link2/?url=http%3A%2F%2Fv.youku.com%2Fv_show%2Fid_XNDAwNDUxMzUyOA%3D%3D.html%3Ftpa%3DdW5pb25faWQ9MzAwMDA4XzEwMDAwMl8wMl8wMQ%26refer%3Desfhz_operation.xuka.xj_00003036_000000_FNZfau_19010900&subtype=3&type=online-video",
192 | "movieTime" : "2018-11-09",
193 | "movieNumSuppose" : NumberInt(131),
194 | "movieNumDownload" : NumberInt(121),
195 | "movieMainPage" : false,
196 | "__v" : NumberInt(0)
197 | }
198 |
--------------------------------------------------------------------------------
/database/json/recommends.json:
--------------------------------------------------------------------------------
1 | {
2 | "_id" : ObjectId("5d121067518fc462f4d6b360"),
3 | "recommendImg" : "https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1561381917376&di=fa554b8ff198ebff910afb548dd5b50f&imgtype=0&src=http%3A%2F%2Fi1.hdslb.com%2Fbfs%2Farchive%2F095e7b89daf78e084d452e11f1695fb821eda0ab.jpg",
4 | "recommendSrc" : "https://www.iqiyi.com/v_19rrfe142o.html",
5 | "recommendTitle" : "流浪地球",
6 | "__v" : NumberInt(0)
7 | }
8 |
--------------------------------------------------------------------------------
/database/json/users.json:
--------------------------------------------------------------------------------
1 | {
2 | "_id" : ObjectId("5d108217d13cf511a850c171"),
3 | "username" : "aa",
4 | "password" : "aaa",
5 | "userMail" : "aa@qq.com",
6 | "userPhone" : "15904911111",
7 | "userAdmin" : false,
8 | "userPower" : NumberInt(0),
9 | "userStop" : true,
10 | "__v" : NumberInt(0)
11 | }
12 | {
13 | "_id" : ObjectId("5d10825ed13cf511a850c172"),
14 | "username" : "admin",
15 | "password" : "admin",
16 | "userMail" : "admin@163.com",
17 | "userPhone" : "13808086666",
18 | "userAdmin" : true,
19 | "userPower" : NumberInt(2),
20 | "userStop" : false,
21 | "__v" : NumberInt(0)
22 | }
23 | {
24 | "_id" : ObjectId("5d1082f8d13cf511a850c173"),
25 | "username" : "admin2",
26 | "password" : "admin2",
27 | "userMail" : "admin2@gmail.com",
28 | "userPhone" : "13923990666",
29 | "userAdmin" : true,
30 | "userPower" : NumberInt(1),
31 | "userStop" : false,
32 | "__v" : NumberInt(0)
33 | }
34 | {
35 | "_id" : ObjectId("5d10910d26e8f91ab0302d75"),
36 | "username" : "wj",
37 | "password" : "666",
38 | "userMail" : "wj@qq.com",
39 | "userPhone" : "13866660708",
40 | "userAdmin" : false,
41 | "userPower" : NumberInt(0),
42 | "userStop" : false,
43 | "__v" : NumberInt(0)
44 | }
45 | {
46 | "_id" : ObjectId("5d10a16bdc89001d9c6986a5"),
47 | "username" : "user1",
48 | "password" : "666",
49 | "userMail" : "user1@163.com",
50 | "userPhone" : "13811110001",
51 | "userAdmin" : false,
52 | "userPower" : NumberInt(0),
53 | "userStop" : true,
54 | "__v" : NumberInt(0)
55 | }
56 | {
57 | "_id" : ObjectId("5d11a76d7caf172090b85917"),
58 | "username" : "yjp",
59 | "password" : "123",
60 | "userMail" : "111@qq.com",
61 | "userPhone" : "15900001111",
62 | "userAdmin" : false,
63 | "userPower" : NumberInt(0),
64 | "userStop" : false,
65 | "__v" : NumberInt(0)
66 | }
67 |
--------------------------------------------------------------------------------
/database/sql/movieServer.comments.sql:
--------------------------------------------------------------------------------
1 | /*
2 | This file was automatically generated by Studio 3T.
3 |
4 | MongoDB Source Collection: `movieServer.comments`
5 |
6 | Warnings about type conversion issues are stored as comments above the
7 | corresponding INSERT statement of each document.
8 | */
9 |
10 |
11 | SET NAMES 'utf8' COLLATE 'utf8_general_ci';
12 |
13 | DROP TABLE IF EXISTS `comments`;
14 | CREATE TABLE `comments` (
15 | `__v` INTEGER,
16 | `_id` VARBINARY(12) NOT NULL,
17 | `check` BIT,
18 | `context` LONGTEXT,
19 | `movie_id` LONGTEXT,
20 | `username` LONGTEXT,
21 | PRIMARY KEY (`_id`)
22 | ) CHARSET=utf8;
23 |
24 | INSERT INTO `comments` (`__v`, `_id`, `check`, `context`, `movie_id`, `username`)
25 | VALUES
26 | (0, x'5D0897E03364A61D1C8C0621', TRUE, 'zhenhaokan', '5d09e9d3dfb8dc3494d45020', '匿名用户');
27 | INSERT INTO `comments` (`__v`, `_id`, `check`, `context`, `movie_id`, `username`)
28 | VALUES
29 | (0, x'5D08985D548F9400CC3B699A', FALSE, 'zhenhaokan', '5d09e9d3dfb8dc3494d45020', 'wj');
30 | INSERT INTO `comments` (`__v`, `_id`, `check`, `context`, `movie_id`, `username`)
31 | VALUES
32 | (0, x'5D103B13C4984F1F68E08839', FALSE, '评论测试', '5d09e93cdfb8dc3494d4501e', 'wj');
33 | INSERT INTO `comments` (`__v`, `_id`, `check`, `context`, `movie_id`, `username`)
34 | VALUES
35 | (0, x'5D10404699302109A07C4B6E', TRUE, '牛逼!!!好音乐真是颗幸福的原子弹!', '5d09e9d3dfb8dc3494d45020', '匿名用户');
36 | INSERT INTO `comments` (`__v`, `_id`, `check`, `context`, `movie_id`, `username`)
37 | VALUES
38 | (0, x'5D10405099302109A07C4B6F', TRUE, '这是我今年最喜欢的电影,没有之一。', '5d09e9d3dfb8dc3494d45020', '匿名用户');
39 | INSERT INTO `comments` (`__v`, `_id`, `check`, `context`, `movie_id`, `username`)
40 | VALUES
41 | (0, x'5D10425299302109A07C4B71', TRUE, '雷洛加跛豪,王晶这回没有玩贱而是难得严肃了一回,整体制作非常老港片的味道,老派枭雄电影的感觉。刘德华果然是越来越有型了。', '5d09bb49b831750d82886ce5', '匿名用户');
42 | INSERT INTO `comments` (`__v`, `_id`, `check`, `context`, `movie_id`, `username`)
43 | VALUES
44 | (0, x'5D1043C999302109A07C4B72', TRUE, '王晶开辟了一个新类型——民族主义黑帮片。此片可作为新世纪后殖民主义港片的代表作,与具有分裂倾向的港毒片近身肉搏。', '5d09bb49b831750d82886ce5', '匿名用户');
45 | INSERT INTO `comments` (`__v`, `_id`, `check`, `context`, `movie_id`, `username`)
46 | VALUES
47 | (0, x'5D10448F99302109A07C4B73', FALSE, '江湖鱼龙混杂,如今尽是鱼虾。龙已飞天而去,任尔泥沙俱下。', '5d09bb49b831750d82886ce5', '匿名用户');
48 | INSERT INTO `comments` (`__v`, `_id`, `check`, `context`, `movie_id`, `username`)
49 | VALUES
50 | (0, x'5D104A164B22CE100847E887', TRUE, '黄渤是有追求的导演,之前真没敢报期望。中国式反乌托邦,以为会是麻花式的喜剧,会在老本行上偷懒,但远远挖掘了更深层次的东西,这对于处女作来说实属不易。体制内无法呈现的阴暗面,以巧妙的抉择呈现,效果惊艳。美术、音乐以及表演掌控自如,恭喜黄渤!', '5d09c057b831750d82886d3b', '匿名用户');
51 | INSERT INTO `comments` (`__v`, `_id`, `check`, `context`, `movie_id`, `username`)
52 | VALUES
53 | (0, x'5D104A264B22CE100847E888', TRUE, '真·一出好戏。剧情表演俱佳,求生模式的暗黑剧情扣人心弦,群戏表演很见功力。最意外张艺兴表演,黑化得很酷了;舒淇一如既往美如画。船舱倒立视角印象深刻,表现力和寓言性十足', '5d09c057b831750d82886d3b', '匿名用户');
54 | INSERT INTO `comments` (`__v`, `_id`, `check`, `context`, `movie_id`, `username`)
55 | VALUES
56 | (0, x'5D10A0AFDC89001D9C6986A1', TRUE, '犹记得当年看雷洛传,王晶不拍贺岁尬喜剧的时候,成熟的功底,配乐就凸现了。甚至还玩起了长镜头。主角配角皆有演技,真的是太久太久没见这样纯正怀旧的港片了。', '5d09bb49b831750d82886ce5', 'wj');
57 | INSERT INTO `comments` (`__v`, `_id`, `check`, `context`, `movie_id`, `username`)
58 | VALUES
59 | (0, x'5D10A0E8DC89001D9C6986A2', TRUE, '神!最后一场戏,基本还原了当年皇后乐队在live aid演唱会的盛况,曲目百分之八十保留,还有龅牙叔献给母亲的那个吻。', '5d09e9d3dfb8dc3494d45020', 'wj');
60 | INSERT INTO `comments` (`__v`, `_id`, `check`, `context`, `movie_id`, `username`)
61 | VALUES
62 | (0, x'5D10A112DC89001D9C6986A3', TRUE, '当熟悉的音符如电流般直抵高潮,纯粹的角色塑造显得无足轻重,对你,摇滚传奇Freddie Mercury而言,再没有比歌声更精确的人格注脚了。 一成不变的天空,偶尔会有燃烧的陨星击穿云层,即兴地闪耀,清脆地焚毁,散成光艳袭人的碎片,巡游在历史里,巡游在半空,被人呼吸,被不同的时代回忆。', '5d0a1b9414cd341520ce1885', 'wj');
63 | INSERT INTO `comments` (`__v`, `_id`, `check`, `context`, `movie_id`, `username`)
64 | VALUES
65 | (0, x'5D10A138DC89001D9C6986A4', TRUE, '“如果再也不能见到你,祝你早安,午安和晚安。”', '5d09c102b831750d82886d46', 'wj');
66 | INSERT INTO `comments` (`__v`, `_id`, `check`, `context`, `movie_id`, `username`)
67 | VALUES
68 | (0, x'5D10E8B5E00958339483960B', TRUE, '666', '5d09e93cdfb8dc3494d4501e', 'yjp');
69 | INSERT INTO `comments` (`__v`, `_id`, `check`, `context`, `movie_id`, `username`)
70 | VALUES
71 | (0, x'5D11A7A57CAF172090B85919', TRUE, 'yjp', '5d09e9d3dfb8dc3494d45020', '匿名用户');
72 | INSERT INTO `comments` (`__v`, `_id`, `check`, `context`, `movie_id`, `username`)
73 | VALUES
74 | (0, x'5D122D4F7B666626C08A9A80', TRUE, '真好看!看的热血沸腾!', '5d09e9d3dfb8dc3494d45020', 'wj');
75 | INSERT INTO `comments` (`__v`, `_id`, `check`, `context`, `movie_id`, `username`)
76 | VALUES
77 | (0, x'5D12EF2DC7A167206070256F', TRUE, '打开这道门,即便现实再最肮脏也请让我自己感受!关掉你的镜头,即使现实再无奈你也必须自己体验!', '5d09c102b831750d82886d46', 'wj');
78 | INSERT INTO `comments` (`__v`, `_id`, `check`, `context`, `movie_id`, `username`)
79 | VALUES
80 | (0, x'5D12F01AC7A1672060702571', TRUE, '荒诞中揭示人性,导演处女作应该说太用心了,简直就是想费力而不只是想讨好(巧)观众;场景和特效都非常认真,荒岛,破船的造型……电影就是高度文明的人再退回到猴子原始时代的现代寓言,这也足见一个酝酿多年的演而优则导的处女作的良苦『野心』,如果多一些这样的的导演,那么我们的国产電影好看了', '5d09c057b831750d82886d3b', 'test');
81 | INSERT INTO `comments` (`__v`, `_id`, `check`, `context`, `movie_id`, `username`)
82 | VALUES
83 | (0, x'5D12F0D1C7A1672060702575', TRUE, '666', '5d0a1b9414cd341520ce1885', '匿名用户');
84 | INSERT INTO `comments` (`__v`, `_id`, `check`, `context`, `movie_id`, `username`)
85 | VALUES
86 | (0, x'5D138F896491AB2EA0F80EFA', TRUE, '666', '5d12eaa582f1d1537b57e3f2', '匿名用户');
87 | INSERT INTO `comments` (`__v`, `_id`, `check`, `context`, `movie_id`, `username`)
88 | VALUES
89 | (0, x'5D24610B33B1F42C9C1DE628', TRUE, '国产科幻巨作!', '5d09e93cdfb8dc3494d4501e', 'wj');
90 |
--------------------------------------------------------------------------------
/database/sql/movieServer.mails.sql:
--------------------------------------------------------------------------------
1 | /*
2 | This file was automatically generated by Studio 3T.
3 |
4 | MongoDB Source Collection: `movieServer.mails`
5 |
6 | Warnings about type conversion issues are stored as comments above the
7 | corresponding INSERT statement of each document.
8 | */
9 |
10 |
11 | SET NAMES 'utf8' COLLATE 'utf8_general_ci';
12 |
13 | DROP TABLE IF EXISTS `mails`;
14 | CREATE TABLE `mails` (
15 | `__v` INTEGER,
16 | `_id` VARBINARY(12) NOT NULL,
17 | `context` LONGTEXT,
18 | `date` LONGTEXT,
19 | `fromUser` LONGTEXT,
20 | `title` LONGTEXT,
21 | `toUser` LONGTEXT,
22 | PRIMARY KEY (`_id`)
23 | ) CHARSET=utf8;
24 |
25 | INSERT INTO `mails` (`__v`, `_id`, `context`, `date`, `fromUser`, `title`, `toUser`)
26 | VALUES
27 | (0, x'5D09A3A7405D8131CC61DC8A', '站内信内容1', '2019-6-19 10:53:27 AM', '5d08883f78394b28d4b2c331', '站内信标题1', '5d08990b8fadcc259091fd5e');
28 | INSERT INTO `mails` (`__v`, `_id`, `context`, `date`, `fromUser`, `title`, `toUser`)
29 | VALUES
30 | (0, x'5D09A3B1405D8131CC61DC8B', '站内信内容2', '2019-6-19 10:53:37 AM', '5d08883f78394b28d4b2c331', '站内信标题2', '5d08990b8fadcc259091fd5e');
31 | INSERT INTO `mails` (`__v`, `_id`, `context`, `date`, `fromUser`, `title`, `toUser`)
32 | VALUES
33 | (0, x'5D09A3D7405D8131CC61DC8C', '站内信内容3', '2019-6-19 10:54:15 AM', '5d08883f78394b28d4b2c331', '站内信标题3', '5d08888e0fc324056011da74');
34 | INSERT INTO `mails` (`__v`, `_id`, `context`, `date`, `fromUser`, `title`, `toUser`)
35 | VALUES
36 | (0, x'5D09A5D2405D8131CC61DC8D', '站内信内容4', '2019-6-19 11:02:42 AM', '5d08883f78394b28d4b2c331', '站内信标题4', '5d08883f78394b28d4b2c331');
37 |
--------------------------------------------------------------------------------
/database/sql/movieServer.movies.sql:
--------------------------------------------------------------------------------
1 | /*
2 | This file was automatically generated by Studio 3T.
3 |
4 | MongoDB Source Collection: `movieServer.movies`
5 |
6 | Warnings about type conversion issues are stored as comments above the
7 | corresponding INSERT statement of each document.
8 | */
9 |
10 |
11 | SET NAMES 'utf8' COLLATE 'utf8_general_ci';
12 |
13 | DROP TABLE IF EXISTS `movies`;
14 | CREATE TABLE `movies` (
15 | `__v` INTEGER,
16 | `_id` VARBINARY(12) NOT NULL,
17 | `movieDownload` LONGTEXT,
18 | `movieImg` LONGTEXT,
19 | `movieMainPage` BIT,
20 | `movieName` LONGTEXT,
21 | `movieNumDownload` INTEGER,
22 | `movieNumSuppose` INTEGER,
23 | `movieTime` LONGTEXT,
24 | `movieVideo` LONGTEXT,
25 | PRIMARY KEY (`_id`)
26 | ) CHARSET=utf8;
27 |
28 | INSERT INTO `movies` (`__v`, `_id`, `movieDownload`, `movieImg`, `movieMainPage`, `movieName`, `movieNumDownload`, `movieNumSuppose`, `movieTime`, `movieVideo`)
29 | VALUES
30 | (NULL, x'5D09BB49B831750D82886CE5', 'https://www.iqiyi.com/v_19rr8ya20o.html', 'https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1562675565641&di=7b170c5348b2083d5f75334edb2605d9&imgtype=0&src=http%3A%2F%2Fi1.wp.com%2Fimg.char.tw%2Fuploads%2F20181025172743_28.jpg%3Fresize%3D1600%2C905', FALSE, '追龙', 3276, 123, '2019-06-19', 'https://movie.douban.com/trailer/221961/#content');
31 | INSERT INTO `movies` (`__v`, `_id`, `movieDownload`, `movieImg`, `movieMainPage`, `movieName`, `movieNumDownload`, `movieNumSuppose`, `movieTime`, `movieVideo`)
32 | VALUES
33 | (0, x'5D09E93CDFB8DC3494D4501E', 'https://www.iqiyi.com/v_19rrfe142o.html', 'https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1561381917376&di=fa554b8ff198ebff910afb548dd5b50f&imgtype=0&src=http%3A%2F%2Fi1.hdslb.com%2Fbfs%2Farchive%2F095e7b89daf78e084d452e11f1695fb821eda0ab.jpg', TRUE, '流浪地球', 5767, 1209, '2019-02-05', 'https://movie.douban.com/video/102604/');
34 | INSERT INTO `movies` (`__v`, `_id`, `movieDownload`, `movieImg`, `movieMainPage`, `movieName`, `movieNumDownload`, `movieNumSuppose`, `movieTime`, `movieVideo`)
35 | VALUES
36 | (0, x'5D09E9D3DFB8DC3494D45020', 'https://www.douban.com/link2/?url=http%3A%2F%2Fwww.iqiyi.com%2Fv_19rqycwafc.html%3Fvfm%3Dm_331_dbdy%26fv%3D4904d94982104144a1548dd9040df241&subtype=9&type=online-video', 'https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1562675635155&di=f335823bbf1008f8f7feac7ddcd71da3&imgtype=0&src=http%3A%2F%2Fi0.hdslb.com%2Fbfs%2Farticle%2Ffd0dd653bec8c800c62d3e219dd3eaf512018d6b.jpg', FALSE, '波西米亚狂想曲 Bohemian Rhapsody', 187, 207, '2019-03-22', 'https://movie.douban.com/trailer/233799/#content');
37 | INSERT INTO `movies` (`__v`, `_id`, `movieDownload`, `movieImg`, `movieMainPage`, `movieName`, `movieNumDownload`, `movieNumSuppose`, `movieTime`, `movieVideo`)
38 | VALUES
39 | (0, x'5D10A45D7F0A541B8D9B3A9E', 'https://www.douban.com/link2/?url=http%3A%2F%2Fv.youku.com%2Fv_show%2Fid_XMzA1NTAzNjAwMA%3D%3D.html%3Ftpa%3DdW5pb25faWQ9MzAwMDA4XzEwMDAwMl8wMl8wMQ%26refer%3Ddoubanneirongshuchu_bd.xuyang01_douban_201122&subtype=3&type=online-video', 'https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1561381801142&di=515c7439d7a1a40be7587cad291b1b91&imgtype=0&src=http%3A%2F%2Fwww.fjsen.com%2Fimages%2Fattachement%2Fjpg%2Fsite1%2F2011-05-24%2F7775612759867346311.jpg', FALSE, '霸王别姬', 559, 1057, '1993-01-01', 'https://movie.douban.com/trailer/239810/#content');
40 | INSERT INTO `movies` (`__v`, `_id`, `movieDownload`, `movieImg`, `movieMainPage`, `movieName`, `movieNumDownload`, `movieNumSuppose`, `movieTime`, `movieVideo`)
41 | VALUES
42 | (0, x'5D122049518FC462F4D6B379', 'https://www.douban.com/link2/?url=https%3A%2F%2Fwww.bilibili.com%2Fbangumi%2Fplay%2Fss10945%3Fbsource%3Ddouban&subtype=8&type=online-video&link2key=8ff2af5937', 'https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1562675691797&di=2dfa4fdd44f0d9d9ef29c1057e4dfa4f&imgtype=0&src=http%3A%2F%2Fhbimg.b0.upaiyun.com%2Ff5a2b2bfde0775a727615963e2387d50d1f4e5b53c5c3-O5cdIq_fw658', FALSE, '这个杀手不太冷 Léon (1994)', 240, 589, '1994-09-14', 'https://movie.douban.com/trailer/108757/#content');
43 | INSERT INTO `movies` (`__v`, `_id`, `movieDownload`, `movieImg`, `movieMainPage`, `movieName`, `movieNumDownload`, `movieNumSuppose`, `movieTime`, `movieVideo`)
44 | VALUES
45 | (NULL, x'5D122093518FC462F4D6B38D', 'https://www.douban.com/link2/?url=http%3A%2F%2Fv.qq.com%2Fx%2Fcover%2Fr6hc2kqgvnmiejn.html%3Fptag%3Ddouban.movie&subtype=1&type=online-video', 'https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1562675775405&di=a24753f4a0bdba7f46080830c6890a18&imgtype=0&src=http%3A%2F%2Fimg0.pconline.com.cn%2Fpconline%2F1205%2F07%2F2777169_13_thumb.jpg', FALSE, '阿甘正传 Forrest Gump (1994)', 67, 1246, '1994-06-23', 'https://movie.douban.com/trailer/160000/#content');
46 | INSERT INTO `movies` (`__v`, `_id`, `movieDownload`, `movieImg`, `movieMainPage`, `movieName`, `movieNumDownload`, `movieNumSuppose`, `movieTime`, `movieVideo`)
47 | VALUES
48 | (NULL, x'5D12209B518FC462F4D6B38E', 'https://www.douban.com/link2/?url=http%3A%2F%2Fwww.iqiyi.com%2Fv_19rrjqfdbc.html%3Fvfm%3Dm_331_dbdy%26fv%3D4904d94982104144a1548dd9040df241&subtype=9&type=online-video', 'https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1563270529&di=57e1613dcc9fd4c2a1d720e3ee9106c2&imgtype=jpg&er=1&src=http%3A%2F%2Fimg1.doubanio.com%2Fview%2Fnote%2Flarge%2Fpublic%2Fp39919097.jpg', FALSE, '美丽人生 La vita è bella (1997)', 234, 5189, '1997-12-20', 'https://movie.douban.com/trailer/108759/#content');
49 | INSERT INTO `movies` (`__v`, `_id`, `movieDownload`, `movieImg`, `movieMainPage`, `movieName`, `movieNumDownload`, `movieNumSuppose`, `movieTime`, `movieVideo`)
50 | VALUES
51 | (NULL, x'5D1220AA518FC462F4D6B39E', 'https://www.douban.com/link2/?url=http%3A%2F%2Fv.qq.com%2Fx%2Fcover%2Ft5jqhgw8pix81mw.html%3Fptag%3Ddouban.movie&subtype=1&type=online-video', 'https://ss0.bdstatic.com/70cFuHSh_Q1YnxGkpoWK1HF6hhy/it/u=4236395672,1233225696&fm=26&gp=0.jpg', FALSE, '泰坦尼克号 Titanic (1997)', 1167, 4567, '1998-04-03', 'https://movie.douban.com/trailer/112229/#content');
52 | INSERT INTO `movies` (`__v`, `_id`, `movieDownload`, `movieImg`, `movieMainPage`, `movieName`, `movieNumDownload`, `movieNumSuppose`, `movieTime`, `movieVideo`)
53 | VALUES
54 | (NULL, x'5D1221B1518FC462F4D6B3E0', 'https://movie.douban.com/ticket/redirect/?url=https%3A%2F%2Fm.maoyan.com%2Fcinema%2Fmovie%2F246264%3F_v_%3Dyes%26merCode%3D1000011', 'https://img3.doubanio.com/view/photo/s_ratio_poster/public/p2557284230.webp', TRUE, '玩具总动员4 Toy Story 4 (2019)', 34, 345, '2019-06-21', 'https://movie.douban.com/trailer/247424/#content');
55 | INSERT INTO `movies` (`__v`, `_id`, `movieDownload`, `movieImg`, `movieMainPage`, `movieName`, `movieNumDownload`, `movieNumSuppose`, `movieTime`, `movieVideo`)
56 | VALUES
57 | (NULL, x'5D1221B4518FC462F4D6B3E1', 'https://movie.douban.com/ticket/redirect/?url=https%3A%2F%2Fm.maoyan.com%2Fcinema%2Fmovie%2F246061%3F_v_%3Dyes%26merCode%3D1000011', 'https://img3.doubanio.com/view/photo/s_ratio_poster/public/p2554370800.webp', TRUE, '哥斯拉2:怪兽之王 Godzilla: King of the Monsters (2019)', 681, 135, '2019-05-31', 'https://movie.douban.com/trailer/246166/#content');
58 | INSERT INTO `movies` (`__v`, `_id`, `movieDownload`, `movieImg`, `movieMainPage`, `movieName`, `movieNumDownload`, `movieNumSuppose`, `movieTime`, `movieVideo`)
59 | VALUES
60 | (NULL, x'5D1221B6518FC462F4D6B3E2', 'https://movie.douban.com/ticket/redirect/?url=https%3A%2F%2Fm.maoyan.com%2Fcinema%2Fmovie%2F1226516%3F_v_%3Dyes%26merCode%3D1000011', 'https://img3.doubanio.com/view/photo/s_ratio_poster/public/p2557500825.webp', TRUE, '哆啦A梦:大雄的月球探险记 映画ドラえもん のび太の月面探査記 (2019)', 126, 800, '2019-06-01 ', 'https://movie.douban.com/trailer/247560/#content');
61 | INSERT INTO `movies` (`__v`, `_id`, `movieDownload`, `movieImg`, `movieMainPage`, `movieName`, `movieNumDownload`, `movieNumSuppose`, `movieTime`, `movieVideo`)
62 | VALUES
63 | (0, x'5D1372C751F4D5138CB519F9', 'https://www.douban.com/link2/?url=https%3A%2F%2Fv.qq.com%2Fx%2Fcover%2F120m3xjxyr69vlz%2Fw0030ma4dhv.html&subtype=1&type=online-video', 'https://img1.doubanio.com/view/photo/s_ratio_poster/public/p2551995207.webp', FALSE, '调音师 Andhadhun (2018)', 115, 1214, '2019-04-03', 'https://movie.douban.com/trailer/244969/#content');
64 | INSERT INTO `movies` (`__v`, `_id`, `movieDownload`, `movieImg`, `movieMainPage`, `movieName`, `movieNumDownload`, `movieNumSuppose`, `movieTime`, `movieVideo`)
65 | VALUES
66 | (0, x'5D1376312C785A0EE8544818', 'https://movie.douban.com/ticket/redirect/?url=https%3A%2F%2Fm.maoyan.com%2Fcinema%2Fmovie%2F346629%3F_v_%3Dyes%26merCode%3D1000011', 'https://img1.doubanio.com/view/photo/s_ratio_poster/public/p2555538168.webp', FALSE, '大侦探皮卡丘 Pokémon Detective Pikachu (2019)', 112, 913, '2019-05-10', 'https://movie.douban.com/trailer/243768/#content');
67 | INSERT INTO `movies` (`__v`, `_id`, `movieDownload`, `movieImg`, `movieMainPage`, `movieName`, `movieNumDownload`, `movieNumSuppose`, `movieTime`, `movieVideo`)
68 | VALUES
69 | (0, x'5D1376D281C3CA3338E69BA0', 'https://movie.douban.com/ticket/redirect/?url=https%3A%2F%2Fm.maoyan.com%2Fcinema%2Fmovie%2F346629%3F_v_%3Dyes%26merCode%3D1000011', 'https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1562675893720&di=047a70b46a73271a7dc62046b8bd298c&imgtype=0&src=http%3A%2F%2Fi2.hexun.com%2F2019-02-14%2F196132192.jpg', FALSE, '阿丽塔:战斗天使 Alita: Battle Angel (2019)', 123, 96, '2019-02-22', 'https://movie.douban.com/trailer/241829/#content');
70 | INSERT INTO `movies` (`__v`, `_id`, `movieDownload`, `movieImg`, `movieMainPage`, `movieName`, `movieNumDownload`, `movieNumSuppose`, `movieTime`, `movieVideo`)
71 | VALUES
72 | (0, x'5D22CB60DDC37A0570118BD4', 'https://movie.douban.com/ticket/redirect/?url=https%3A%2F%2Fm.maoyan.com%2Fcinema%2Fmovie%2F1198925%3F_v_%3Dyes%26merCode%3D1000011', 'https://img3.doubanio.com/view/photo/s_ratio_poster/public/p2558293106.webp', TRUE, '蜘蛛侠:英雄远征 Spider-Man: Far From Home (2019)', 116, 168, '2019-06-28', 'https://movie.douban.com/trailer/248749/#content');
73 | INSERT INTO `movies` (`__v`, `_id`, `movieDownload`, `movieImg`, `movieMainPage`, `movieName`, `movieNumDownload`, `movieNumSuppose`, `movieTime`, `movieVideo`)
74 | VALUES
75 | (0, x'5D22CB79DDC37A0570118BD5', 'https://movie.douban.com/subject/30171425/?from=showing', 'https://img3.doubanio.com/view/photo/s_ratio_poster/public/p2561172733.webp', TRUE, '扫毒2天地对决 (2019)', 1121, 516, '2019-07-05', 'https://movie.douban.com/trailer/249286/#content');
76 | INSERT INTO `movies` (`__v`, `_id`, `movieDownload`, `movieImg`, `movieMainPage`, `movieName`, `movieNumDownload`, `movieNumSuppose`, `movieTime`, `movieVideo`)
77 | VALUES
78 | (0, x'5D22CC145475453330A94B31', 'https://www.douban.com/link2/?url=http%3A%2F%2Fv.youku.com%2Fv_show%2Fid_XNDAwNDUxMzUyOA%3D%3D.html%3Ftpa%3DdW5pb25faWQ9MzAwMDA4XzEwMDAwMl8wMl8wMQ%26refer%3Desfhz_operation.xuka.xj_00003036_000000_FNZfau_19010900&subtype=3&type=online-video', 'https://img3.doubanio.com/view/photo/l/public/p2537158013.webp', FALSE, '毒液:致命守护者 Venom (2018)', 121, 131, '2018-11-09', 'https://movie.douban.com/trailer/238802/#content');
79 |
--------------------------------------------------------------------------------
/database/sql/movieServer.recommends.sql:
--------------------------------------------------------------------------------
1 | /*
2 | This file was automatically generated by Studio 3T.
3 |
4 | MongoDB Source Collection: `movieServer.recommends`
5 |
6 | Warnings about type conversion issues are stored as comments above the
7 | corresponding INSERT statement of each document.
8 | */
9 |
10 |
11 | SET NAMES 'utf8' COLLATE 'utf8_general_ci';
12 |
13 | DROP TABLE IF EXISTS `recommends`;
14 | CREATE TABLE `recommends` (
15 | `__v` INTEGER,
16 | `_id` VARBINARY(12) NOT NULL,
17 | `recommendImg` LONGTEXT,
18 | `recommendSrc` LONGTEXT,
19 | `recommendTitle` LONGTEXT,
20 | PRIMARY KEY (`_id`)
21 | ) CHARSET=utf8;
22 |
23 | INSERT INTO `recommends` (`__v`, `_id`, `recommendImg`, `recommendSrc`, `recommendTitle`)
24 | VALUES
25 | (0, x'5D121067518FC462F4D6B360', 'https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1561381917376&di=fa554b8ff198ebff910afb548dd5b50f&imgtype=0&src=http%3A%2F%2Fi1.hdslb.com%2Fbfs%2Farchive%2F095e7b89daf78e084d452e11f1695fb821eda0ab.jpg', 'https://www.iqiyi.com/v_19rrfe142o.html', '流浪地球');
26 |
--------------------------------------------------------------------------------
/database/sql/movieServer.users.sql:
--------------------------------------------------------------------------------
1 | /*
2 | This file was automatically generated by Studio 3T.
3 |
4 | MongoDB Source Collection: `movieServer.users`
5 |
6 | Warnings about type conversion issues are stored as comments above the
7 | corresponding INSERT statement of each document.
8 | */
9 |
10 |
11 | SET NAMES 'utf8' COLLATE 'utf8_general_ci';
12 |
13 | DROP TABLE IF EXISTS `users`;
14 | CREATE TABLE `users` (
15 | `__v` INTEGER,
16 | `_id` VARBINARY(12) NOT NULL,
17 | `password` LONGTEXT,
18 | `userAdmin` BIT,
19 | `userMail` LONGTEXT,
20 | `userPhone` LONGTEXT,
21 | `userPower` INTEGER,
22 | `userStop` BIT,
23 | `username` LONGTEXT,
24 | PRIMARY KEY (`_id`)
25 | ) CHARSET=utf8;
26 |
27 | INSERT INTO `users` (`__v`, `_id`, `password`, `userAdmin`, `userMail`, `userPhone`, `userPower`, `userStop`, `username`)
28 | VALUES
29 | (0, x'5D108217D13CF511A850C171', 'aaa', FALSE, 'aa@qq.com', '15904911111', 0, TRUE, 'aa');
30 | INSERT INTO `users` (`__v`, `_id`, `password`, `userAdmin`, `userMail`, `userPhone`, `userPower`, `userStop`, `username`)
31 | VALUES
32 | (0, x'5D10825ED13CF511A850C172', 'admin', TRUE, 'admin@163.com', '13808086666', 2, FALSE, 'admin');
33 | INSERT INTO `users` (`__v`, `_id`, `password`, `userAdmin`, `userMail`, `userPhone`, `userPower`, `userStop`, `username`)
34 | VALUES
35 | (0, x'5D1082F8D13CF511A850C173', 'admin2', TRUE, 'admin2@gmail.com', '13923990666', 1, FALSE, 'admin2');
36 | INSERT INTO `users` (`__v`, `_id`, `password`, `userAdmin`, `userMail`, `userPhone`, `userPower`, `userStop`, `username`)
37 | VALUES
38 | (0, x'5D10910D26E8F91AB0302D75', '666', FALSE, 'wj@qq.com', '13866660708', 0, FALSE, 'wj');
39 | INSERT INTO `users` (`__v`, `_id`, `password`, `userAdmin`, `userMail`, `userPhone`, `userPower`, `userStop`, `username`)
40 | VALUES
41 | (0, x'5D10A16BDC89001D9C6986A5', '666', FALSE, 'user1@163.com', '13811110001', 0, TRUE, 'user1');
42 | INSERT INTO `users` (`__v`, `_id`, `password`, `userAdmin`, `userMail`, `userPhone`, `userPower`, `userStop`, `username`)
43 | VALUES
44 | (0, x'5D11A76D7CAF172090B85917', '123', FALSE, '111@qq.com', '15900001111', 0, FALSE, 'yjp');
45 |
--------------------------------------------------------------------------------
/screenshot/1.首页.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wangjun1996/VueMovieWebsite/31b11000a973ea36fd0e8b2b84af759534114a7f/screenshot/1.首页.png
--------------------------------------------------------------------------------
/screenshot/10.添加电影页面.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wangjun1996/VueMovieWebsite/31b11000a973ea36fd0e8b2b84af759534114a7f/screenshot/10.添加电影页面.png
--------------------------------------------------------------------------------
/screenshot/11.影评管理页面.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wangjun1996/VueMovieWebsite/31b11000a973ea36fd0e8b2b84af759534114a7f/screenshot/11.影评管理页面.png
--------------------------------------------------------------------------------
/screenshot/12.添加影评页面.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wangjun1996/VueMovieWebsite/31b11000a973ea36fd0e8b2b84af759534114a7f/screenshot/12.添加影评页面.png
--------------------------------------------------------------------------------
/screenshot/13.评论管理页面.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wangjun1996/VueMovieWebsite/31b11000a973ea36fd0e8b2b84af759534114a7f/screenshot/13.评论管理页面.png
--------------------------------------------------------------------------------
/screenshot/14.用户管理页面.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wangjun1996/VueMovieWebsite/31b11000a973ea36fd0e8b2b84af759534114a7f/screenshot/14.用户管理页面.png
--------------------------------------------------------------------------------
/screenshot/2.注册页面.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wangjun1996/VueMovieWebsite/31b11000a973ea36fd0e8b2b84af759534114a7f/screenshot/2.注册页面.png
--------------------------------------------------------------------------------
/screenshot/3.登录页面.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wangjun1996/VueMovieWebsite/31b11000a973ea36fd0e8b2b84af759534114a7f/screenshot/3.登录页面.png
--------------------------------------------------------------------------------
/screenshot/4.电影列表页面.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wangjun1996/VueMovieWebsite/31b11000a973ea36fd0e8b2b84af759534114a7f/screenshot/4.电影列表页面.png
--------------------------------------------------------------------------------
/screenshot/5.影评列表页面.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wangjun1996/VueMovieWebsite/31b11000a973ea36fd0e8b2b84af759534114a7f/screenshot/5.影评列表页面.png
--------------------------------------------------------------------------------
/screenshot/6.电影详情页面.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wangjun1996/VueMovieWebsite/31b11000a973ea36fd0e8b2b84af759534114a7f/screenshot/6.电影详情页面.png
--------------------------------------------------------------------------------
/screenshot/7.影评详情页面.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wangjun1996/VueMovieWebsite/31b11000a973ea36fd0e8b2b84af759534114a7f/screenshot/7.影评详情页面.png
--------------------------------------------------------------------------------
/screenshot/8.后台管理主页面.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wangjun1996/VueMovieWebsite/31b11000a973ea36fd0e8b2b84af759534114a7f/screenshot/8.后台管理主页面.png
--------------------------------------------------------------------------------
/screenshot/9.电影管理页面.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wangjun1996/VueMovieWebsite/31b11000a973ea36fd0e8b2b84af759534114a7f/screenshot/9.电影管理页面.png
--------------------------------------------------------------------------------