From f3e60487333a12fc05098682aa3f7b915ca5a520 Mon Sep 17 00:00:00 2001 From: Alvis Date: Mon, 2 Mar 2020 23:21:56 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=AE=8C=E6=88=90=E4=B9=A6=E7=AD=BE?= =?UTF-8?q?=E7=9A=84=E4=B8=8A=E4=BC=A0=E5=92=8C=E4=B8=8B=E8=BD=BD=EF=BC=8C?= =?UTF-8?q?=E4=B9=A6=E7=AD=BE=E4=BF=9D=E5=AD=98=E5=9C=A8=E6=9C=AC=E5=9C=B0?= =?UTF-8?q?=E6=96=87=E4=BB=B6=E4=B8=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- extension/popup.js | 38 +++++++++++++------- server/.gitignore | 5 ++- server/db.js | 86 ++++++++++++++++++++++++++++++--------------- server/index.js | 35 +++++++++++++----- server/package.json | 1 + server/yarn.lock | 15 +++++++- 6 files changed, 129 insertions(+), 51 deletions(-) diff --git a/extension/popup.js b/extension/popup.js index 1322bfd..d2f4666 100644 --- a/extension/popup.js +++ b/extension/popup.js @@ -43,6 +43,10 @@ function Node() { let BookmarkTreeNodeList = []; const BOOKMARK = 0; const BOOKEMAR_FOLDER = 1; +const PROTO = 'http' +const SERVER_ADDRESS = '127.0.0.1' +const SERVER_PORT = '3000' +const SERVER_URL = `${PROTO}://${SERVER_ADDRESS}:${SERVER_PORT}` function addToList(node) { let bookmarkNode = new Node(); @@ -66,6 +70,7 @@ function addToList(node) { } function getBookmarkList(callback) { + BookmarkTreeNodeList = [] chrome.bookmarks.getTree(function(tree) { for (let i = 0; i < tree.length; i++) { let node = tree[i]; @@ -76,20 +81,29 @@ function getBookmarkList(callback) { } $("#upload").on("click", function() { - getBookmarkList(function(error, list) { - for (let i = 0; i < list.length; i++) { - $.ajax({ - type: "POST", - url: "http://localhost:3000/bookmarks", - data: list[i], - success: function(data) { - callback(data); - } - }); - } + getBookmarkList(function(error, bookmarkArray) { + $.ajax({ + type: "POST", + url: `${SERVER_URL}/bookmarks`, + contentType: 'application/json;charset=utf-8', + dataType: 'json', + data: JSON.stringify(bookmarkArray), + success: function() { + console.log('上传了 ' + bookmarkArray.length + ' 条书签') + }, + error: function() { + console.error('上传失败') + } + }); }); }); $("#download").on("click", function() { - alert("下载"); + $.ajax({ + type: "GET", + url: `${SERVER_URL}/bookmarks`, + success: function(bookmarkArray) { + console.log('下载了 ' + bookmarkArray.length + ' 条书签') + } + }); }); diff --git a/server/.gitignore b/server/.gitignore index 40b878d..5aba0fd 100644 --- a/server/.gitignore +++ b/server/.gitignore @@ -1 +1,4 @@ -node_modules/ \ No newline at end of file +node_modules/ +database/ +yarn.lock +package-lock.json \ No newline at end of file diff --git a/server/db.js b/server/db.js index 64d1f48..d943dcc 100644 --- a/server/db.js +++ b/server/db.js @@ -1,40 +1,68 @@ -const MongoClient = require('mongodb').MongoClient +// const MongoClient = require('mongodb').MongoClient const assert = require('assert') const fs = require('fs') +const path = require('path') -const DATABASE_NAME = 'bookmarksdb' -const DATABASE_SERVER = '192.168.31.201' -const DATABASE_PORT = 27017 -const USER = encodeURIComponent('root'); -const PASSWORD = encodeURIComponent('root123'); -const AUTHMECHANISM = 'SCRAM-SHA-1'; +// const DATABASE_NAME = 'bookmarksdb' +// const DATABASE_SERVER = '192.168.31.201' +// const DATABASE_PORT = 27017 +// const USER = encodeURIComponent('root'); +// const PASSWORD = encodeURIComponent('root123'); +// const AUTHMECHANISM = 'SCRAM-SHA-1'; // const DATABASE_URL = `mongodb://${USER}:${PASSWORD}@${DATABASE_SERVER}:${DATABASE_PORT}/?authMechanism=${AUTHMECHANISM}&authSource=${DATABASE_NAME}` -const DATABASE_URL = `mongodb://${DATABASE_SERVER}:${DATABASE_PORT}/${DATABASE_NAME}` -const COLLECTION = 'bookmarks' +// const DATABASE_URL = `mongodb://${DATABASE_SERVER}:${DATABASE_PORT}/${DATABASE_NAME}` +// const COLLECTION = 'bookmarks' -const inertData = (db, callback) => { - const collection = db.collection('bookmarks') - let data = [{ - id: '0', - title: "根书签" - }] - collection.insertMany(data, (error, result) => { - assert.equal(null, error) - assert(1, result.result.n) - assert(1, result.ops.length) - callback(result) - }) +// const inertData = (db, callback) => { +// const collection = db.collection('bookmarks') +// let data = [{ +// id: '0', +// title: "根书签" +// }] +// collection.insertMany(data, (error, result) => { +// assert.equal(null, error) +// assert(1, result.result.n) +// assert(1, result.ops.length) +// callback(result) +// }) +// } + +exports.connect = () => { + // const client = new MongoClient(DATABASE_URL) + // client.connect((error) => { + // assert.equal(null, error) + // const db = client.db(DATABASE_NAME) + // console.log('connect ' + DATABASE_URL + ' successfully') + // inertData(db, result => { + // client.close() + // }) + // }) } -exports.connect = ( ) => { - const client = new MongoClient(DATABASE_URL) +exports.save = (bookmarkArray, callback) => { + console.log('save data') + const bookmarkStr = JSON.stringify(bookmarkArray) + fs.writeFile(path.join('database', Date.now() + '.json'), bookmarkStr, err => { + callback(err) + }); +} - client.connect((error) => { - assert.equal(null, error) - const db = client.db(DATABASE_NAME) - console.log('connect ' + DATABASE_URL + ' successfully') - inertData(db, result => { - client.close() +exports.get = callback => { + console.log('get latest bookmarks') + fs.readdir(path.join('database'), (err, files ) => { + if (err) throw err + console.log(files) + let latestFile = 0 + for (let i = 0; i < files.length; i++) { + let filename = files[i] + const time = filename.substr(0, filename.length - 5) + console.log(time) + if (time > latestFile) { + latestFile = time + } + } + fs.readFile(path.join('database', latestFile + '.json'), (error, data) => { + callback(error, JSON.parse(data.toString())) }) }) } \ No newline at end of file diff --git a/server/index.js b/server/index.js index bb689de..bf0c108 100644 --- a/server/index.js +++ b/server/index.js @@ -1,28 +1,47 @@ const express = require('express'); +const cors = require('cors'); const app = express(); +const path = require('path'); +const fs = require('fs'); const port = 3000; -// const db = require('./db') -// db.connect() +const SUCCESS_CODE = 0 + +const db = require('./db') +db.connect() + +app.use(cors()) app.use(express.json()) // for parsing application/json app.use(express.urlencoded({ extended: true })) // for parsing application/x-www-form-urlencoded app.get('/', (req, res) => { - res.send('Hello World!') + res.json({ + code: SUCCESS_CODE, + data: { + version: '0.1' + } + }) }) app.get('/bookmarks', function (req, res) { - console.log('download bookmarks') + db.get((error, bookmarkArray) => { + if (error) throw error res.json({ - id: '0', - title: '标题' + code: SUCCESS_CODE, + data: bookmarkArray }) + }) }) app.post('/bookmarks', function (req, res) { - console.log('upload bookmarks') - console.log(req.body) + const bookmarkArray = req.body + db.save(bookmarkArray, err => { + if (err) throw err + }) + res.json({ + code: SUCCESS_CODE + }) }) app.listen(port, () => { console.log("server is running at port " + port) }) diff --git a/server/package.json b/server/package.json index f329b74..bd3cb90 100644 --- a/server/package.json +++ b/server/package.json @@ -10,6 +10,7 @@ "license": "ISC", "description": "", "dependencies": { + "cors": "^2.8.5", "express": "4.17.1", "mongodb": "3.5.4" } diff --git a/server/yarn.lock b/server/yarn.lock index fe97e8a..047dc31 100644 --- a/server/yarn.lock +++ b/server/yarn.lock @@ -76,6 +76,14 @@ core-util-is@~1.0.0: resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= +cors@^2.8.5: + version "2.8.5" + resolved "https://registry.npm.taobao.org/cors/download/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29" + integrity sha1-6sEdpRWS3Ya58G9uesKTs9+HXSk= + dependencies: + object-assign "^4" + vary "^1" + debug@2.6.9: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" @@ -291,6 +299,11 @@ negotiator@0.6.2: resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== +object-assign@^4: + version "4.1.1" + resolved "https://registry.npm.taobao.org/object-assign/download/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= + on-finished@~2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" @@ -475,7 +488,7 @@ utils-merge@1.0.1: resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= -vary@~1.1.2: +vary@^1, vary@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=