diff --git a/README.md b/README.md index 57c6143..4baa715 100644 --- a/README.md +++ b/README.md @@ -7,6 +7,17 @@ npm install npm test ``` +##安裝babel-cli + +``` +npm install -g babel-cli +``` + +開起檔案 +``` +babel-node <檔案名稱.js> +``` + ##problem 如有遇到下圖的問題 diff --git a/database.db b/database.db index 3f8ea29..58f79ad 100644 Binary files a/database.db and b/database.db differ diff --git a/package.json b/package.json index b1eba65..1135ccb 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,7 @@ "watchPost": "sqlite3 database.db 'select * from posts'" }, "devDependencies": { - "babel-cli": "*", + "babel-cli": "^6.10.1", "babel-core": "^6.8.0", "babel-eslint": "^6.0.4", "babel-plugin-syntax-async-functions": "^6.8.0", diff --git a/src/facebook/helper.js b/src/facebook/helper.js index 0d08cc7..3ccf76e 100644 --- a/src/facebook/helper.js +++ b/src/facebook/helper.js @@ -18,7 +18,7 @@ export default class FacebookHelper { async getFriends() { try { let result = await new Promise((resolve, reject) => { - this.FB.api(`${this.userId}/friends`, function(res, error) { + this.FB.api(`${this.userId}/friends?fields=id,name`, function(res, error) { if(error) reject(error); resolve(res.data); }); @@ -44,4 +44,4 @@ export default class FacebookHelper { } } -} +}; diff --git a/src/models/friend.js b/src/models/friend.js new file mode 100644 index 0000000..d613d24 --- /dev/null +++ b/src/models/friend.js @@ -0,0 +1,16 @@ +'use strict'; + +module.exports = (sequelize, DataTypes) => { + var Friend = sequelize.define('Friend', { + name: DataTypes.STRING, + email: DataTypes.STRING, + fbId: DataTypes.STRING, + }, { + classMethods: { + associate: (models) => { + } + } + }); + + return Friend; +}; diff --git a/src/models/user.js b/src/models/user.js index 1a893c2..9024958 100644 --- a/src/models/user.js +++ b/src/models/user.js @@ -2,10 +2,9 @@ module.exports = (sequelize, DataTypes) => { var User = sequelize.define('User', { - username: DataTypes.STRING, + name: DataTypes.STRING, email: DataTypes.STRING, - password: DataTypes.STRING, - age: DataTypes.INTEGER, + fbId: DataTypes.STRING, }, { classMethods: { associate: (models) => { diff --git a/src/server/add.js b/src/server/add.js new file mode 100644 index 0000000..bae1e6e --- /dev/null +++ b/src/server/add.js @@ -0,0 +1,6 @@ +export default function add(x,y){ + console.log("add ok"); + return x + y; +} + +exports.add = add; diff --git a/src/server/requestHandlers.js b/src/server/requestHandlers.js index c50c115..3ea638c 100644 --- a/src/server/requestHandlers.js +++ b/src/server/requestHandlers.js @@ -1,6 +1,12 @@ -export function start() { +export function start(response) { console.log("Request handler 'start' was called."); + response.writeHead(200, {"Content-Type": "text/plain"}); + response.write("Hello Start"); + response.end(); } -export function upload() { +export function upload(response) { console.log("Request handler 'upload' was called."); + response.writeHead(200, {"Content-Type": "text/plain"}); + response.write("Hello Upload"); + response.end(); } diff --git a/src/server/router.js b/src/server/router.js index e3f30ac..c73a0d7 100644 --- a/src/server/router.js +++ b/src/server/router.js @@ -1,9 +1,12 @@ -export default function route(handle, pathname) { +export default function route(handle, pathname, response) { console.log("About to route a request for " + pathname); if (typeof handle[pathname] === 'function') { - handle[pathname](); + handle[pathname](response); } else { console.log("No request handler found for " + pathname); + response.writeHead(404, {"Content-Type": "text/plain"}); + response.write("404 not found"); + response.end(); } } diff --git a/src/server/test.js b/src/server/test.js new file mode 100644 index 0000000..bb33344 --- /dev/null +++ b/src/server/test.js @@ -0,0 +1,140 @@ +var Http = require('http'), + Router = require('router'), + server, + router; + +router = new Router(); + +var BodyParser = require('body-parser'); + + +server = Http.createServer(function(request, response) { + router(request, response, function(error) { + if (!error) { + response.writeHead(404); + } else { + // Handle errors + console.log(error.message, error.stack); + response.writeHead(400); + } + response.end('RESTful API Server is running!\n'); + }); +}); + +server.listen(3000, function() { + console.log('Listening on port 3000'); +}); + +var counter = 0, + todoList = {}; + +router.use(BodyParser.text()); + +function createItem(request, response) { + var id = counter += 1, + item = request.body; + + console.log('Create item', id, item); + todoList[id] = item; + response.writeHead(201, { + 'Content-Type': 'text/plain', + 'Location': '/todo/' + id + }); + response.end(item); +} +router.post('/todo', createItem); + +function readItem(request, response) { + var id = request.params.id, + item = todoList[id]; + + if (typeof item !== 'string') { + console.log('Item not found', id); + response.writeHead(404); + response.end('\n'); + return; + } + + console.log('Read item', id, item); + + response.writeHead(200, { + 'Content-Type': 'text/plain' + }); + response.end(item); +} +router.get('/todo/:id', readItem); + +function deleteItem(request, response) { + var id = request.params.id; + + if (typeof todoList[id] !== 'string') { + console.log('Item not found', id); + response.writeHead(404); + response.end('\n'); + return; + } + + console.log('Delete item', id); + + todoList[id] = undefined; + response.writeHead(204, { + 'Content-Type': 'text/plain' + }); + response.end(''); +} +router.delete('/todo/:id', deleteItem); + +function readList(request, response) { + var item, + itemList = [], + listString; + + for (id in todoList) { + if (!todoList.hasOwnProperty(id)) { + continue; + } + item = todoList[id]; + + if (typeof item !== 'string') { + continue; + } + + itemList.push(item); + } + + console.log('Read List: \n', JSON.stringify( + itemList, + null, + ' ' + )); + + listString = itemList.join('\n'); + + response.writeHead(200, { + 'Content-Type': 'tet/plain' + }); + response.end(listString); +} +router.get('/todo', readList); + +function updateItem(request, response) { + var id = request.params.id, + item = request.body; + + if (typeof todoList[id] !== 'string') { + console.log('Item not found', id); + response.writeHead(404); + response.end('\n'); + return; + } + + console.log('Update item', id, item); + + todoList[id] = item; + response.writeHead(201, { + 'Content-Type': 'text/plain', + 'Location': '/todo/' + id + }); + response.end(item); +} +router.put('/todo/:id', updateItem); diff --git a/test/unit/database/task1.test.js b/test/unit/database/task1.test.js index 463745d..0d88f83 100644 --- a/test/unit/database/task1.test.js +++ b/test/unit/database/task1.test.js @@ -1,6 +1,6 @@ import task1_initModel from '../../../src/database/task1'; -describe('database level 1', () => { +describe.skip('database level 1', () => { let models = null; beforeEach(async (done) => { try { @@ -143,7 +143,7 @@ describe('database level 1', () => { }); -describe('database task1 find', () => { +describe.skip('database task1 find', () => { let models = null; beforeEach(async (done) => { @@ -198,3 +198,40 @@ describe('database task1 find', () => { }); }); + +describe('model define' , () => { + let models = null; + beforeEach(async (done) => { + try { + models = await task1_initModel() + done() + } catch (e) { + done(e) + } + }); + + it('model defined', async (done) => { + try { + let addUser = {name: 'test', fbId: 'test', email: 'test@mail.com' }; + let result = {}; + result = await models.User.create(addUser) + result.toJSON().should.has.keys( + 'id', + 'name', + 'fbId', + 'email', + 'createdAt', + 'updatedAt' + ); + result.name.should.be.eq('test'); + result.name.should.be.string; + result.fbId.should.be.string; + result.email.should.be.string; + done(); + } catch (e) { + done(e); + } + }); + + +}) diff --git a/test/unit/facebook/helper.test.js b/test/unit/facebook/helper.test.js index 6856c56..4f91cf2 100644 --- a/test/unit/facebook/helper.test.js +++ b/test/unit/facebook/helper.test.js @@ -1,23 +1,112 @@ import FacebookHelper from '../../../src/facebook/helper.js' +import task1_initModel from '../../../src/database/task1'; -describe('facebook-helper', () => { +describe.only('facebook-helper', () => { let facebookHelper = null; + let models = null - before((done) => { - let userId = ""; - let token = ""; + before(async (done) => { + let userId = "618444968267382"; + let token = "EAACEdEose0cBAI7Se9TQU9ZCM3gG7cph9V3eEDBGQTPClEKFgS0oiZCWzP0ZCCZCBmrEBlVKpuSbDnVttsXzKhFbH1625eRkp1xp9VM7IABD2m9upze185blIj8hbcZAd8kjsj79DXux4yKbUXZBnmuWGcWjc84VkzhYaJ3KqqRgZDZD"; facebookHelper = new FacebookHelper({userId, token}); console.log(facebookHelper); + try{ + models = await task1_initModel() + }catch(e){done(e)} + done(); }); it("get friends list", async (done) => { try { let friends = await facebookHelper.getFriends(); + let friends_list = {}; console.log("friends", friends); - (friends != null).should.be.true; - friends.should.be.Array; - friends[0].should.have.keys("name", "id"); + console.log("QAQ"); + let j=0; + for(let i of friends) + { + friends_list[j] = await models.Friend.create({ + fbId: friends[j].id , + name: friends[j].name , + email: 'test@mail.com', + }); + console.log("QAQ" + j); + j=j+1; + } + console.log(friends_list); + + console.log(friends_list[0].name); + (friends_list != null).should.be.true; + friends_list.should.be.Array; + // for(var i=0;i<12;i++) + // friends_list[i].should.have.keys("name", "email", "fbId"); + for(var i=0;i<12;i++) + { + (friends_list[i].name != null).should.be.true; + (friends_list[i].fbId != null).should.be.true; + (friends_list[i].email != null).should.be.true; + } + done(); + } catch (e) { + done(e); + } + }); + + it("find friends list", async (done) => { + try { + let result_find = await models.Friend.findAll(); + // console.log(result_find); + + (result_find != null).should.be.true; + done(); + } catch (e) { + done(e); + } + }); + + it("update friends list", async (done) => { + try { + await models.Friend.update( + { + email: 'hellojs@trunk.studio' + }, + { + where:{ + name:'Cheng-En Tsai' + } + } + ); + let result_find = await models.Friend.findOne({ + where:{ + name:'Cheng-En Tsai' + } + }); + console.log(result_find); + + result_find.email.should.be.eq('hellojs@trunk.studio'); + done(); + } catch (e) { + done(e); + } + }); + + it("delete friends list", async (done) => { + try { + await models.Friend.destroy({ + where:{ + name:'Cheng-En Tsai' + } + }); + //console.log(result_find); + let result_find = models.Friend.findOne({ + where:{ + name:'Cheng-En Tsai' + } + }); + console.log("find = " + result_find.name); + + (result_find.name === undefined).should.be.true; done(); } catch (e) { done(e); diff --git a/test/unit/server/add.test.js b/test/unit/server/add.test.js new file mode 100644 index 0000000..c1511dd --- /dev/null +++ b/test/unit/server/add.test.js @@ -0,0 +1,12 @@ + +import add from '../../../src/server/add.js'; +var expect = require("chai").expect; + +describe('node server add', function() { + it("OK", function() { + var testadd = add(1,1); + + expect(testadd).to.equal(2); +}); + +});