Langsung ke konten utama

Continues Integration Menggunakan Travis CI dan Github Part 3


Setelah sekian lama saya tidak update karna kesibukan akhirnya kali ini saya bisa update melanjutkan postingan sebelumnya :D.

Pada artikel sebelumnya yaitu Continues Integration Menggunakan Travis CI dan Github Part 2 kita telah membuat test untuk proyek yang akan dibuat, dan pada postingan kali ini kita akan menerapkan tes yang telah dibuat.


Menerapkan tes

Jalankan perintah berikut pada cmd/terminal untuk menginstall library yang kita gunakan untuk membuat server.

npm install express mongodb --save

Disini saya menggunakan express untuk mempermudah dalam pembuatan server dan mongodb database untuk menyimpan riwayat pencarian. Pada kasus ini saya menggunakan layanan mlab.com untuk bagian database mongodb. Anda dapat mendaftar di mlab.com kemudian membuat database dan user baru serta mengcopy mongodb uri, uri tersebut nantinya akan digunakan untuk autentikasi ke layanan mlab.
Mongodb URI


Sekarang buat file baru beri nama server.js dan copy koding berikut

const app = require('./app');
const http = require('http');
const port = process.env.PORT || 8080;
const server = http.createServer(app);

// memulai server dan mendengarkan pada port yang telah ditentukan
server.listen(port);
server.on('listening', function () {
console.log('server running and listening at port ' + port);
});
// mendengarkan event error yang terjadi di server
server.on('error', onError);

function onError(error) {
if (error.syscall !== 'listen') {
throw error;
}
const bind = typeof port === 'string' ? 'Pipe ' + port : 'Port ' + port;
switch (error.code) {
case 'EACCES':
console.error(bind + ' requires elevated privileges');
process.exit(1);
break;
case 'EADDRINUSE':
console.error(bind + ' is already in use');
process.exit(1);
break;
default:
throw error;
}
}

Selanjutnya buat file javascript baru beri nama app.js, pada file ini kita akan menginisialisasikan tiap route yang akan digunakan. Pertama-tama kita akan menginisilaisasikan express dan membuat halaman index.
const path = require('path');
// menginisialisasikan express framework
const express = require('express');
const app = express();
// megirimkan response file index.html ke sisi klien saat server diakses hanya menggunakan hostname
// http://expressjs.com/en/starter/basic-routing.html
app.get('/', function (req, res) {
res.sendFile(path.join(__dirname, 'index.html'));
});
Kemudian buat file html baru beri nama index.html dan copykan coding berikut.


Sekarang kita akan membuat API route untuk pencarian.
const path = require('path');
// menginisialisasikan express framework
const express = require('express');
const app = express();
const apiKey = process.env.GCS_API_KEY || 'GOOGLE_CUSTOM_SEARCH_API_KEY';
const baseUrl = 'https://www.googleapis.com/customsearch/v1?key=' + apiKey + '&searchType=image&cx=012158711088233114633:p02zzyrapyg&q=';
// megirimkan response file index.html ke sisi klien saat server diakses hanya menggunakan hostname
// http://expressjs.com/en/starter/basic-routing.html
app.get('/', function (req, res) {
res.sendFile(path.join(__dirname, 'index.html'));
});
// mengirimkan API response array dari Google Custom Search saat user mengakses url http://yourweb.com/anything
app.get('/:query', handleSearch);

function handleSearch(req, res) {
// mendapatkan url query paramater
const query = req.params.query;
const limit = req.query.limit || 10;
const startIndex = req.query.offset || 1;
// jika offset lebih dari 1 maka tambahkan offset dengan limit
if (startIndex > 1) startIndex = (startIndex * limit) - limit;
const url = baseUrl + query + '&num=' + limit + '&start=' + startIndex;
// mengirim http request ke Google Custom Search API
httpRequest(url).then(function (response) {
var history = {
"term": query,
"time": new Date().toLocaleString()
};
// Menyimpan query dan waktu ke database
if (query !== 'favicon.ico') {
db.save(history);
response = JSON.parse(response);
console.log('response', response);
// mengirimkan response dari Google Custom Search API ke klien
res.send(response.items.map(function (item) {
item.image.link = item.link;
return item.image;
}));
}
});
}

Sekarang buat file javascript baru beri nama httprequest.js kemudian copy koding berikut
const http = require('http');
const https = require('https');

module.exports = function (url, data) {
return new Promise(function(resolve, reject) {
if(url.startsWith('https://'))
https.get(url, function(response) {
console.log('statusCode:', response.statusCode);
// Continuously update stream with data
var body = '';
response.on('data', function (d) {
body += d.toString();
});
response.on('error', reject);
response.on('end', function () {
// Data reception is done, do whatever with it!
resolve(body);
});
}).on('error', reject);
if(url.startsWith('http://'))
http.get(url, function(response) {
console.log('statusCode:', response.statusCode);
// Continuously update stream with data
var body = '';
response.on('data', function (d) {
body += d.toString();
});
response.on('error', reject);
response.on('end', function () {
// Data reception is done, do whatever with it!
resolve(body);
});
}).on('error', reject);

});
}

Selanjutnya buat file javascript baru beri nama db.js.
const mongodb = require('mongodb');
const MongoClient = mongodb.MongoClient;
const url = process.env.MONGOLAB_URI || 'MONGODB_URI';

// Menggunakan metode connect untuk melakukan koneksi ke mlab.com
MongoClient.connect(url, function (err, db) {
if (err) {
console.log('Unable to connect to the mongoDB server. Error:', err);
} else {
console.log('Connection established to mongolab db');
db.createCollection("histories", {
capped: false,
size: 5242880,
max: 5000
}, function () {
//Close connection
db.close();
});

}
});

// menghapus data dari database
module.exports.deleteData = function (obj) {
MongoClient.connect(url, function (err, db) {
if (err)
throw new Error('Unable to connect to the mongoDB server. Error:', err);
var links = db.collection('histories');
links.remove(obj, function (err, result) {
if (err) throw err;
console.log('Deleted ' + result);
db.close();
});
});
}
// menyimpan data ke database
module.exports.save = function (obj) {
MongoClient.connect(url, function (err, db) {
if (err)
throw err;
var histories = db.collection('histories');
histories.save(obj, function (err, result) {
if (err) throw err;
console.log('Saved ' + result);
db.close();
});
})
}
// mendapatkan semua riwayat pencarian
module.exports.getHistory = function (req, res) {
MongoClient.connect(url, function (err, db) {
var histories = db.collection('histories');
histories.find({}, {}, {
"limit": 10,
"sort": {
"time": -1
}
}, function (err, history) {
if (err) return console.error(err);
history.toArray(function (err, result) {
if (err) throw err;
console.log(result);
res.send(result.map(function (arg) {
// Displays only the field we need to show.
return {
term: arg.term,
time: arg.time
};
}));
});
});
});
};

Sekarang jalankan tes kembali maka Anda akan melihat bahwa semua tes sudah berhasil.

Pada postingan selanjutnya kita akan mulai menggunakan Github dan Travis CI untuk melakukan Continues Integration.

Komentar

Postingan populer dari blog ini

Dua Startup Indonesia yang Berangkat ke Google Amerika

Dua perusahaan rintisan (startup) asal Indonesia berkesempatan diboyong ke markas Google yang bertempat di Mountain View, California, Amerika Serikat. Selain Indonesia, ada satu lagi startup dari negara lain yang dibawa untuk menghadiri konferensi tahunan Google I/O yang digelar pada 16-18 Mei 2017 mendatang. Yaitu dari Meksiko. STARTUP MENJAMUR DI INDONESIA, HANYA SEDIKIT YANG SUKSES Startup yang dimaksud adalah Pasienia (Indonesia) , Reblood (Indonesia) , dan Croquetero (Meksiko). Ketiganya yang terpilih dari 469 pelamar dari anggota Google Business Groups (GBG) dan para enterprenir independen di 26 negara. Disebutkan, pengajuan tersebut merepresentasikan ide-ide besar dari enterpreneur di seluruh dunia, termasuk di antaranya Brasil, Mesir, Maroko, Nigeria, Pakistan, Peru, hingga Uganda. "Sebagai bentuk usaha Google dalam menginspirasi para entrepreneur untuk dapat mengarahkan bisnis mereka ke ranah online, Google mengundang para anggota GBG global untuk dapat berpartisipasi dal

Membuat Situs Traffic Exchange

Membuat Situs Traffic Exchange Pada saat ini situs-situs traffic exchange semakin marak di dunia internet. Karena semakin berkembangya teknologi sehingga membuat hal lain pun ikut berkembang. Situs Traffic Exchange ini misalnya, saat ini banyak situs-situs traffic exchange yang tidak hanya menyediakan layana traffic exchange namun sekarang  telah ada situs traffic exchange yang menawarkan Social Exchange seperti twitter followers, facebook like, google+ circle dan lain sebagainya. Dan bahkan ada juga situs traffic exchange yang menyediakan layanan SEO seperti Directory Submission.  Pada postingan ini saya tidak akan berbicara banyak kepada Anda, karena saya tahu saat Anda masuk ke halaman ini berarti Anda sedang mencari cara Membuat Situs Traffic Exchange. Mungkin Anda sampai ke halaman ini karna mungkin hanya sedikit blog/website lain yang membahas tentang hal ini. Dan mungkin niat Anda adalah Membuat Situs Traffic Exchange secara gratis sehingga Anda tidak perlu mengeluarkan uang unt

18 Fakta Unik Dan Menarik Mengenai Youtube Yang Banyak Orang Belum Ketahui

Bagi kalian pengguna youtube setia,kali ni saya akan bagikan artikel mengenai 18 Fakta Unik Dan Menarik Mengenai Youtube Yang Banyak Orang Belum Ketahui . Youtube didirikan pada bulan februari 2005 Oleh 3 orang mantan karyawan Paypal,yaitu Chad Hurley Steve Chan dan Jawed Karim. Youtube adalah perpustakaan Video Paling banyak dan lengkap di dunia. Merupakan situs layanan sharing video paling terkenal di dunia,dan sudah menjadi salah satu situs besar dan terpopuler di internet sejak tahun 2005. Youtube memunculkan Beta Tes pada bulan mei 2005,dan pada bulan juli 2006 tepatnya 8 bulan setelah diresmikan,tercatat 65.000 video yang baru diupload ke situs youtube setiap harinya,dengan jumlah Viewer mencapai 100 juta perhari. Pada Bulan Oktober 2006 Perusahaan Google membeli youtube senilai 1,65 Milyar US$. Saat ini youtube menjadi situs video provider paling dominan di amerika serikat,bahkan mungkin didunia,dengan menguasahi hingga 43% Pasar. Diperkirakan 20 durasi jam video di upload ke y