diff --git a/README.md b/README.md
index f60a3e8..15008be 100644
--- a/README.md
+++ b/README.md
@@ -1,2 +1,2 @@
-# node-
-基于koa2的影视项目
+# express-blog
+突然想用node写一个博客网站,本来选择的是koa,但是因为express使用的人群要比koa2多所以就先用express写了一个简易的,因为我对koa2的前景非常看好
\ No newline at end of file
diff --git a/config.js b/config.js
new file mode 100644
index 0000000..f7c722e
--- /dev/null
+++ b/config.js
@@ -0,0 +1,6 @@
+const config = {
+ db: 'mongodb://',
+ port: 3001
+}
+
+module.exports = config
\ No newline at end of file
diff --git a/database/schema/comments.js b/database/schema/comments.js
new file mode 100644
index 0000000..5d6aba4
--- /dev/null
+++ b/database/schema/comments.js
@@ -0,0 +1,39 @@
+const mongoose = require('mongoose')
+const moment = require('moment')
+const Schema = mongoose.Schema
+const CommentsSchema = new Schema({
+ content: String,
+ code: String,
+ meta: {
+ createdAt: {
+ type: Date,
+ default: moment(new Date()).format("YYYY-MM-DD")
+ },
+ updateAt: {
+ type: Date,
+ default: moment(new Date()).format("YYYY-MM-DD")
+ }
+ }
+})
+
+CommentsSchema.pre('save', function(next) {
+ if (this.isNew) {
+ this.meta.createdAt = this.meta.updateAt = moment(new Date()).format("YYYY-MM-DD")
+ } else {
+ this.meta.updateAt = moment(new Date()).format("YYYY-MM-DD")
+ }
+ next()
+})
+
+
+CommentsSchema.statics = {
+ fetch: function(code, cb) {
+ return this
+ .find({code: code})
+ .sort('meta.updateAt')
+ .exec(cb)
+ }
+}
+const comments = mongoose.model('Comments', CommentsSchema)
+
+module.exports = comments
\ No newline at end of file
diff --git a/database/schema/user.js b/database/schema/user.js
new file mode 100644
index 0000000..7a6b6f9
--- /dev/null
+++ b/database/schema/user.js
@@ -0,0 +1,70 @@
+const mongoose = require('mongoose')
+const bcrypt = require('bcrypt')
+const moment = require('moment')
+
+const SALT_WORK_FACTOR = 10
+const MAX_LOGIN_ATTEMPTS = 5
+const LOCK_TIME = 2 * 60 * 60 * 1000
+
+const Schema = mongoose.Schema
+const UserSchema = new Schema({
+ username: String,
+ password: String,
+ emali: String,
+ check: {
+ type: Boolean,
+ default: false
+ },
+ meta: {
+ createdAt: {
+ type: Date,
+ default: moment(new Date())
+ },
+ updateAt: {
+ type: Date,
+ default: moment(new Date())
+ }
+ }
+})
+
+UserSchema.pre('save', function(next) {
+
+ if (this.isNew) {
+ this.meta.createdAt = this.meta.updateAt = Date.now()
+ } else {
+ this.meta.updateAt = Date.now()
+ }
+
+ next()
+})
+
+
+UserSchema.pre('save', function(next) {
+ let user = this
+ if (!user.isModified('password')) return next()
+ bcrypt.genSalt(SALT_WORK_FACTOR, (err, salt) => {
+ if(err) return next(err)
+ bcrypt.hash(user.password, salt, (error, hash) => {
+ if (error) return next(error)
+ user.password = hash
+ next()
+ })
+ })
+})
+
+UserSchema.methods = {
+ comparePassword: function(_password, password) {
+ return new Promise((resolve, reject) => {
+ bcrypt.compare(_password, password, function(err, isMatch) {
+ if (!err) resolve(isMatch)
+ else reject(err)
+ })
+ })
+ }
+}
+
+
+
+const user = mongoose.model('User', UserSchema)
+
+module.exports = user
\ No newline at end of file
diff --git a/database/schema/write.js b/database/schema/write.js
new file mode 100644
index 0000000..756a149
--- /dev/null
+++ b/database/schema/write.js
@@ -0,0 +1,47 @@
+const mongoose = require('mongoose')
+const moment = require('moment')
+const Schema = mongoose.Schema
+const WriteSchema = new Schema({
+ contentCode: String,
+ meta: {
+ createdAt: {
+ type: Date,
+ default: moment(new Date()).format("YYYY-MM-DD")
+ },
+ updateAt: {
+ type: Date,
+ default: moment(new Date()).format("YYYY-MM-DD")
+ }
+ },
+ comments: {
+ type: Array,
+ default: []
+ }
+})
+
+WriteSchema.pre('save', function(next) {
+ if (this.isNew) {
+ this.meta.createdAt = this.meta.updateAt = moment(new Date()).format("YYYY-MM-DD")
+ } else {
+ this.meta.updateAt = moment(new Date()).format("YYYY-MM-DD")
+ }
+ next()
+})
+
+
+WriteSchema.statics = {
+ fetch: function (cb) {
+ return this
+ .find({})
+ .sort('meta.updateAt')
+ .exec(cb)
+ },
+ findById: function (id, cb) {
+ return this
+ .findOne({_id: id})
+ .exec(cb)
+ }
+}
+const writeCode = mongoose.model('Write', WriteSchema)
+
+module.exports = writeCode
diff --git a/index.js b/index.js
new file mode 100644
index 0000000..eda8273
--- /dev/null
+++ b/index.js
@@ -0,0 +1,160 @@
+const express = require('express')
+const app = express()
+const mongoose = require('mongoose')
+const bodyParser = require('body-parser')
+const _underscore = require('underscore')
+const serveStatic = require('serve-static')
+const session = require('express-session')
+
+const config = require('./config')
+app.locals.moment = require('moment')
+
+var port = process.env.PORT || config.port
+app.listen(port)
+console.log(`listen: http://localhost:${port}`)
+//链接数据库
+mongoose.connect(config.db)
+
+mongoose.connection.on('disconnected', () => {
+ mongoose.connect(config.db)
+})
+
+mongoose.connection.on('error', err => {
+ console.log(err)
+})
+
+mongoose.connection.once('open', () => {
+ console.log('Connected to MongoDB -> ', config.db)
+})
+
+
+app.use(bodyParser.urlencoded({ extended: true }))
+app.use(serveStatic('public'))
+app.use(session({
+ secret: 'secret',
+ cookie: { maxAge: 1000 * 60 * 60 * 60 },
+ resave: true,
+ saveUninitialized: false
+}))
+
+
+
+
+const user = require('./database/schema/user')
+
+const { checkPassword, findUsername, findAllArticl } = require('./service/admin.js')
+
+
+const writeCode = require('./database/schema/write')
+const commentsCode = require('./database/schema/comments')
+app.set('views', __dirname + '/views')
+app.set('view engine', 'pug')
+
+app.get('/', function(req, res) {
+ if (req.session.username) {
+ res.redirect('/home')
+ } else {
+ res.redirect('/login')
+ }
+})
+
+app.get('/login', function(req, res) {
+ res.render('login')
+})
+app.post('/login', async function(req, res) {
+ const { username, password, check } = req.body
+ if (req.body.username && req.body.password) {
+ var _user = new user({
+ username: username,
+ password: password,
+ check: check
+ })
+ const data = await checkPassword(username, password)
+ const { userCount, match } = data
+ if (match) {
+ req.session.username = username
+ res.redirect('/home')
+ } else {
+ res.render('login', {
+ errMessage: '密码错误'
+ })
+ }
+ }
+})
+
+app.get('/register', function(req, res) {
+ res.render('register')
+})
+
+app.get('/main/:id', function(req, res) {
+ writeCode.findById(req.params.id, function(err, content) {
+
+ commentsCode.fetch(req.params.id, function(err, comments) {
+ res.render('main', {
+ content: content,
+ comments: comments
+ })
+ })
+ })
+
+
+})
+
+app.post('/register',function(req, res) {
+ const { username, email, password, check } = req.body
+ var _user = new user({
+ username: username,
+ password: password,
+ email: email,
+ check: check
+ })
+
+ const data = findUsername(username)
+ if (data) {
+ res.render('register', {
+ errMessage: '用户名已注册,请重新输入'
+ })
+ } else {
+ if (check) {
+ req.session.username = username
+ }
+ _user.save(function(err, user) {
+ res.redirect('home')
+ })
+ }
+})
+
+app.get('/home', async function(req, res) {
+ await writeCode.fetch(function(err, content) {
+ res.render('home', {
+ content: content
+ })
+ })
+
+})
+app.get('/write', function(req, res) {
+ res.render('write')
+})
+
+app.post('/write', function(req, res) {
+ const { contentCode } = req.body
+ const _write = new writeCode({
+ contentCode: contentCode
+ })
+ _write.save(function(err, user) {
+ res.redirect('/home')
+ })
+})
+app.post('/writeComment', async function(req, res) {
+ const { code, content } = req.body
+ const _comments = new commentsCode({
+ code: code,
+ content: content
+ })
+ await _comments.save(function(err, user) {
+ res.send({
+ status: 200,
+ msg: '添加评论成功'
+ })
+ })
+})
\ No newline at end of file
diff --git a/package-lock.json b/package-lock.json
deleted file mode 100644
index bd35916..0000000
--- a/package-lock.json
+++ /dev/null
@@ -1,266 +0,0 @@
-{
- "name": "nodejs",
- "version": "1.0.0",
- "lockfileVersion": 1,
- "requires": true,
- "dependencies": {
- "accepts": {
- "version": "1.3.5",
- "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz",
- "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=",
- "requires": {
- "mime-types": "2.1.18",
- "negotiator": "0.6.1"
- }
- },
- "any-promise": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz",
- "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8="
- },
- "co": {
- "version": "4.6.0",
- "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
- "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ="
- },
- "content-disposition": {
- "version": "0.5.2",
- "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz",
- "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ="
- },
- "content-type": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
- "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA=="
- },
- "cookies": {
- "version": "0.7.1",
- "resolved": "https://registry.npmjs.org/cookies/-/cookies-0.7.1.tgz",
- "integrity": "sha1-fIphX1SBxhq58WyDNzG8uPZjuZs=",
- "requires": {
- "depd": "1.1.2",
- "keygrip": "1.0.2"
- }
- },
- "debug": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
- "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
- "requires": {
- "ms": "2.0.0"
- }
- },
- "deep-equal": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz",
- "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU="
- },
- "delegates": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
- "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o="
- },
- "depd": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
- "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
- },
- "destroy": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
- "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
- },
- "ee-first": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
- "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
- },
- "error-inject": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/error-inject/-/error-inject-1.0.0.tgz",
- "integrity": "sha1-4rPZG1Su1nLzCdlQ0VSFD6EdTzc="
- },
- "escape-html": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
- "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
- },
- "fresh": {
- "version": "0.5.2",
- "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
- "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac="
- },
- "http-assert": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/http-assert/-/http-assert-1.3.0.tgz",
- "integrity": "sha1-oxpc+IyHPsu1eWkH1NbxMujAHko=",
- "requires": {
- "deep-equal": "1.0.1",
- "http-errors": "1.6.2"
- }
- },
- "http-errors": {
- "version": "1.6.2",
- "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz",
- "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=",
- "requires": {
- "depd": "1.1.1",
- "inherits": "2.0.3",
- "setprototypeof": "1.0.3",
- "statuses": "1.4.0"
- },
- "dependencies": {
- "depd": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz",
- "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k="
- }
- }
- },
- "inherits": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
- "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
- },
- "is-generator-function": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.7.tgz",
- "integrity": "sha512-YZc5EwyO4f2kWCax7oegfuSr9mFz1ZvieNYBEjmukLxgXfBUbxAWGVF7GZf0zidYtoBl3WvC07YK0wT76a+Rtw=="
- },
- "keygrip": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/keygrip/-/keygrip-1.0.2.tgz",
- "integrity": "sha1-rTKXxVcGneqLz+ek+kkbdcXd65E="
- },
- "koa": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/koa/-/koa-2.5.0.tgz",
- "integrity": "sha512-UkrbMW2mRNfoW/4I20knJEjtPAWCV3Iw6f4XdnPWjHsCN8iTeSh0eSutrYdL0fGF/G9on2eQ30EEQif0MarGJA==",
- "requires": {
- "accepts": "1.3.5",
- "content-disposition": "0.5.2",
- "content-type": "1.0.4",
- "cookies": "0.7.1",
- "debug": "3.1.0",
- "delegates": "1.0.0",
- "depd": "1.1.2",
- "destroy": "1.0.4",
- "error-inject": "1.0.0",
- "escape-html": "1.0.3",
- "fresh": "0.5.2",
- "http-assert": "1.3.0",
- "http-errors": "1.6.2",
- "is-generator-function": "1.0.7",
- "koa-compose": "4.0.0",
- "koa-convert": "1.2.0",
- "koa-is-json": "1.0.0",
- "mime-types": "2.1.18",
- "on-finished": "2.3.0",
- "only": "0.0.2",
- "parseurl": "1.3.2",
- "statuses": "1.4.0",
- "type-is": "1.6.16",
- "vary": "1.1.2"
- }
- },
- "koa-compose": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/koa-compose/-/koa-compose-4.0.0.tgz",
- "integrity": "sha1-KAClE9nDYe8NY4UrA45Pby1adzw="
- },
- "koa-convert": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/koa-convert/-/koa-convert-1.2.0.tgz",
- "integrity": "sha1-2kCHXfSd4FOQmNFwC1CCDOvNIdA=",
- "requires": {
- "co": "4.6.0",
- "koa-compose": "3.2.1"
- },
- "dependencies": {
- "koa-compose": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/koa-compose/-/koa-compose-3.2.1.tgz",
- "integrity": "sha1-qFzLQLfZhtjlo0Wzoazo6rz1Tec=",
- "requires": {
- "any-promise": "1.3.0"
- }
- }
- }
- },
- "koa-is-json": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/koa-is-json/-/koa-is-json-1.0.0.tgz",
- "integrity": "sha1-JzwH7c3Ljfaiwat9We52SRRR7BQ="
- },
- "media-typer": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
- "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g="
- },
- "mime-db": {
- "version": "1.33.0",
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz",
- "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ=="
- },
- "mime-types": {
- "version": "2.1.18",
- "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz",
- "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==",
- "requires": {
- "mime-db": "1.33.0"
- }
- },
- "ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
- },
- "negotiator": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz",
- "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk="
- },
- "on-finished": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
- "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
- "requires": {
- "ee-first": "1.1.1"
- }
- },
- "only": {
- "version": "0.0.2",
- "resolved": "https://registry.npmjs.org/only/-/only-0.0.2.tgz",
- "integrity": "sha1-Kv3oTQPlC5qO3EROMGEKcCle37Q="
- },
- "parseurl": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz",
- "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M="
- },
- "setprototypeof": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz",
- "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ="
- },
- "statuses": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz",
- "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew=="
- },
- "type-is": {
- "version": "1.6.16",
- "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz",
- "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==",
- "requires": {
- "media-typer": "0.3.0",
- "mime-types": "2.1.18"
- }
- },
- "vary": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
- "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw="
- }
- }
-}
diff --git a/package.json b/package.json
index fe55073..a00cb19 100644
--- a/package.json
+++ b/package.json
@@ -1,27 +1,24 @@
{
- "name": "nodejs",
+ "name": "express",
"version": "1.0.0",
- "description": "基于koa2的影视项目",
- "main": "server/index.js",
+ "description": "",
+ "main": "index.js",
"scripts": {
- "start": "node server/index.js",
+ "start": "nodemon index.js",
"test": "echo \"Error: no test specified\" && exit 1"
},
- "repository": {
- "type": "git",
- "url": "git+https://github.com/zhanglongdream/nodeJs.git"
- },
- "keywords": [
- "movie",
- "trailer"
- ],
"author": "",
- "license": "MIT",
- "bugs": {
- "url": "https://github.com/zhanglongdream/nodeJs/issues"
- },
- "homepage": "https://github.com/zhanglongdream/nodeJs#readme",
+ "license": "ISC",
"dependencies": {
- "koa": "^2.5.0"
+ "bcrypt": "^1.0.3",
+ "body-parser": "^1.18.2",
+ "express": "^4.16.2",
+ "express-session": "^1.15.6",
+ "moment": "^2.21.0",
+ "mongoose": "^5.0.9",
+ "nodemon": "^1.17.1",
+ "pug": "^2.0.0",
+ "serve-static": "^1.13.2",
+ "underscore": "^1.8.3"
}
}
diff --git a/public/css/home.css b/public/css/home.css
new file mode 100644
index 0000000..e69de29
diff --git a/public/css/login.css b/public/css/login.css
new file mode 100644
index 0000000..8fc3d85
--- /dev/null
+++ b/public/css/login.css
@@ -0,0 +1,62 @@
+html,
+body {
+ height: 100%;
+}
+
+body {
+ display: -ms-flexbox;
+ display: -webkit-box;
+ display: flex;
+ -ms-flex-align: center;
+ -ms-flex-pack: center;
+ -webkit-box-align: center;
+ align-items: center;
+ -webkit-box-pack: center;
+ justify-content: center;
+ padding-top: 40px;
+ padding-bottom: 40px;
+ background-color: #f5f5f5;
+}
+
+.form-signin {
+ width: 100%;
+ max-width: 330px;
+ padding: 15px;
+ margin: 0 auto;
+}
+
+.form-signin .checkbox {
+ font-weight: 400;
+ display: -ms-flexbox;
+ display: -webkit-box;
+ display: flex;
+ -webkit-box-pack: space-between;
+ justify-content: space-between;
+}
+
+.form-signin .form-control {
+ position: relative;
+ box-sizing: border-box;
+ height: auto;
+ padding: 10px;
+ font-size: 16px;
+}
+
+.form-signin .form-control:focus {
+ z-index: 2;
+}
+
+.form-signin input[type="email"] {
+ margin-bottom: -1px;
+ border-bottom-right-radius: 0;
+ border-bottom-left-radius: 0;
+}
+
+.form-signin input[type="password"] {
+ margin-bottom: 10px;
+ border-top-left-radius: 0;
+ border-top-right-radius: 0;
+}
+.form-control-file{
+ margin: 10px 0;
+}
\ No newline at end of file
diff --git a/public/css/write.css b/public/css/write.css
new file mode 100644
index 0000000..e69de29
diff --git a/public/js/home.js b/public/js/home.js
new file mode 100644
index 0000000..e69de29
diff --git a/public/js/login.js b/public/js/login.js
new file mode 100644
index 0000000..0860e3c
--- /dev/null
+++ b/public/js/login.js
@@ -0,0 +1,15 @@
+// $.ajax({
+// url: '/login',
+// type: 'POST',
+// data: {
+// aa: 11
+// },
+// dataType: 'json',
+// success: function (data, status) {
+// console.log(data)
+// },
+// fail: function (err, status) {
+// console.log(err)
+// }
+// })
+// console.log($)
\ No newline at end of file
diff --git a/public/js/write.js b/public/js/write.js
new file mode 100644
index 0000000..212de70
--- /dev/null
+++ b/public/js/write.js
@@ -0,0 +1,22 @@
+$(document).ready(function() {
+ $('.summernote').summernote({
+ height: 150, //set editable area's height
+ codemirror: { // codemirror options
+ theme: 'monokai'
+ }
+ });
+});
+
+$('.btn-success').click(function(){
+if($('.summernote').summernote('code').length > 0) {
+ $.ajax({
+ url: '/write',
+ type: 'post',
+ data: {contentCode: $('.summernote').summernote('code')},
+ success: function (data) {
+ window.location.href = '/home'
+ }
+ })
+}
+
+})
\ No newline at end of file
diff --git a/public/main/main.css b/public/main/main.css
new file mode 100644
index 0000000..e2681e9
--- /dev/null
+++ b/public/main/main.css
@@ -0,0 +1,31 @@
+/* Sticky footer styles
+-------------------------------------------------- */
+html {
+ position: relative;
+ min-height: 100%;
+}
+body {
+ margin-bottom: 60px; /* Margin bottom by footer height */
+}
+.footer {
+ position: absolute;
+ bottom: 0;
+ width: 100%;
+ height: 60px; /* Set the fixed height of the footer here */
+ line-height: 60px; /* Vertically center the text there */
+ background-color: #f5f5f5;
+}
+
+
+/* Custom page CSS
+-------------------------------------------------- */
+/* Not required for template or sticky footer method. */
+
+.container {
+ width: auto;
+ max-width: 680px;
+ padding: 0 15px;
+}
+.div-submit{
+ text-align: right;
+}
diff --git a/public/main/main.js b/public/main/main.js
new file mode 100644
index 0000000..92ffd8e
--- /dev/null
+++ b/public/main/main.js
@@ -0,0 +1,15 @@
+$('input[type="button"]').click(function(){
+ $.ajax({
+ url: '/writeComment',
+ type: 'post',
+ data: {
+ code: window.location.href.split('main/')[1],
+ content: $('textarea').val()
+ },
+ success: function (data) {
+ console.log(111111111)
+ window.location.reload()
+ }
+ })
+
+})
\ No newline at end of file
diff --git a/server/index.js b/server/index.js
deleted file mode 100644
index ec12131..0000000
--- a/server/index.js
+++ /dev/null
@@ -1,6 +0,0 @@
-const Koa = require('koa')
-const app = new Koa()
-app.use(async (ctx, next) => {
- ctx.body = '电影首页'
-})
-app.listen(4400)
\ No newline at end of file
diff --git a/service/admin.js b/service/admin.js
new file mode 100644
index 0000000..a84f1c0
--- /dev/null
+++ b/service/admin.js
@@ -0,0 +1,30 @@
+const mongoose = require('mongoose')
+const User = mongoose.model('User')
+// const Write = mongoose.model('Write')
+
+const config = {
+ checkPassword: async function(username, password) {
+ let match = false
+
+ const userCount = await User.findOne({ username: username }).exec()
+ if (userCount) {
+ match = await userCount.comparePassword(password, userCount.password)
+ }
+ return {
+ match,
+ userCount
+ }
+ },
+ findUsername: async function(username) {
+ const user = await User.findOne({ username: username }).exec()
+ return user
+ },
+ // findAllArticl: async function() {
+ // const content = await Write.findOne({}).sort('meta.updateAt').exec()
+ // return content
+ // }
+}
+
+
+
+module.exports = config
\ No newline at end of file
diff --git a/views/home.pug b/views/home.pug
new file mode 100644
index 0000000..4712060
--- /dev/null
+++ b/views/home.pug
@@ -0,0 +1,12 @@
+extends ./layouts/default
+
+block title
+ title 首页
+block styles
+ link(href="css/home.css" rel="stylesheet")
+
+block content
+ include ./includes/header
+ include ./includes/content
+ include ./includes/footer
+ script(src='js/home.js')
\ No newline at end of file
diff --git a/views/includes/articl.pug b/views/includes/articl.pug
new file mode 100644
index 0000000..fa9ed96
--- /dev/null
+++ b/views/includes/articl.pug
@@ -0,0 +1,15 @@
+
!{item.contentCode}
+