techcareer.net - Socket.io - Bootcamp
Sonradan eklenen kütüphaneler
cookie-parser
$ npm install cookie-parser
$ npm install --save @types/cookie-parser
crypto-js
$ npm install crypto-js
$ npm install --save @types/crypto-js
axios
$ npm install axios
Projede:
- Express-Gateway kullanmak için projedeki user, tweet, chat controller 3 klasöre ayrılmış sonrasında https://www.express-gateway.io/getting-started/ sitesindeki yollar izlenerek microservice mimarisine geçildi. 8080 portuyla User ve Tweet servisleri çalışmış olup, Socket.io 8003 portuyla kullanılmıştır.
Screenshot
Gateway |
---|
- Client olarak test etmek için POSTMAN ile Switch Request Type "Socket-IO" yapılarak events kısmında user, join group, user joined, message, leave group, disconnect group, user left responseları dinlendi.
- Message için Arg 1 (userID) - Arg 2 (chatID) - Arg 3(your_message)
- Kullanıcı isterse 'leave group' ile socket üzerinden gruptan ayrılabilir ve datadan ismi silinir.
Screenshot
Socket Test Admin | Socket Test User |
---|---|
- Pagination kısmında dummy datası için axios kütüphanesi kullanılarak internetten 500 kayıt çağrıldı. startIndex, endIndex değişkenleriyle farklı pageIndex ve pageSize değerlerinde dataların filtrelenmesi sağlandı.
- jwt anahtarlarını manuel girmemek için AES şifrelemesi ile 30 dakikalık cookie session oluşturuldu.
- Kişisel tercihler için user.data içerisine array preferences() eklendi ve pref.controller oluşturuldu. Kullanıcı user/preferences yoluyla "otpLogin": true or false yapabilmektedir.
- user.controller kısmında kullancı kayıt olurken varsayılan olarak preferencese eklenmek üzere "otpLogin=False" oluşturuldu.
Controller üzerinde kullanılan parametreler
Spoiler
POST:
/user/register
{
"username": "your_username",
"password": "your_password"
}
POST:
/user/verify
{
"username": "your_username",
"otpCode": "your_otp_code"
}
POST:
/user/login
{
"username":"your_username",
"password": "your_password" // otpLogin = false
"OTP": "your_otp_code" // otpLogin = true
}
POST:
/user/preferences
{
"otpLogin": true or false
}
POST:
/user/delete
{
"userID": "UUID"
}
POST:
/user/update
{
"userID": "UUID",
"password": "new_password",
"birthday": "new_birthday"
}
POST:
/chat/create/group
{
"groupName": "group_name"
}
POST:
/chat/join/group
{
"chatID": "_id"
}
POST:
/chat/delete
{
"chatID": "_id"
}
POST:
/tweet/new
{
"content": "your_tweet"
}
POST:
/tweet/update
{
"tweetID": "UUID",
"content": "your_updated_tweet"
}
POST:
/tweet/delete
{
"tweetID": "UUID",
"content": "your_deleted_tweet"
}
POST:
/tweet/tweets
{
// All tweets
}
GET:
/tweet/usertweet
{
// User tweets
}
POST:
/tweet/like
{
"tweetID": "UUID"
}
POST:
/tweet/comment
{
"tweetID": "UUID",
"comment": "your_comment"
}