From cb5ca9b0985fca9d3ea90209528be15114e40749 Mon Sep 17 00:00:00 2001 From: Alejandro de las muelas Date: Sat, 20 Jul 2019 17:14:05 +0200 Subject: [PATCH 1/3] can't access api 400 --- app.js | 6 ++- .../images/photo-1552772279-24fa4a454544.jpeg | Bin 0 -> 18613 bytes routes/artists.js | 35 ++++++++++++++++++ routes/index.js | 4 +- views/artists.hbs | 1 + views/index.hbs | 5 ++- 6 files changed, 48 insertions(+), 3 deletions(-) create mode 100644 public/images/photo-1552772279-24fa4a454544.jpeg create mode 100644 routes/artists.js create mode 100644 views/artists.hbs diff --git a/app.js b/app.js index 95f5da10c..ba66e471c 100644 --- a/app.js +++ b/app.js @@ -1,3 +1,5 @@ +'use strict'; + const createError = require('http-errors'); const express = require('express'); const path = require('path'); @@ -5,9 +7,10 @@ const cookieParser = require('cookie-parser'); const logger = require('morgan'); const hbs = require('hbs'); -// require spotify-web-api-node package here: + const indexRouter = require('./routes/index'); +const artistsRouter = require('./routes/artists'); const app = express(); @@ -22,6 +25,7 @@ app.use(cookieParser()); app.use(express.static(path.join(__dirname, 'public'))); app.use('/', indexRouter); + app.use('/artists', artistsRouter); // catch 404 and forward to error handler app.use((req, res, next) => { diff --git a/public/images/photo-1552772279-24fa4a454544.jpeg b/public/images/photo-1552772279-24fa4a454544.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..541b9599fdfac9d90bd79d85ee3b177eb3c24fd6 GIT binary patch literal 18613 zcmd74cU)9Gw>G?I7&=HtK!lO1^xmr=T~K;&LmO~FkPZTZQbiD?SLsOaAXNboY0`B- zdhflLchLLx_B`i2=e)o7JAZrul54LdD=W#`*(=#=bNTIZ3LsRHQ0K!1n-vB2+={~r9&9>-OCzsC+LYiVWX^2ix_HK;I$M-DDd&?k@0V3tt! ze^uiD=Zb%b^@kj6>XufPPL}qlrnFI72Di6HO}D)T+!^j*4~5(RyBYp}toDZtSMZl! zqX0?P1wd-T0TA|)0%+^q0E7e=Kr>85<$!+An+mozaCPVD&@TScdlW|H|BU}b1dc#m zf}g;xp;u%XbxkPD#mV&wqwa~T2pzxy2mn%m5}*O-f!hE(zyk;ZqJR`|4^RTs08Ky- zFa}_N4S)cg05`xJcm@OlVL&7h10(`zKo*b>6a(cz4bT9506qa-z*k@x7z3t&d0-XT z0uF#v)Ix>{!UvInC_%I!Mi48A2P6cN0Nn$rfYd>HAXAVv$R6YZ@&*Nf!az}=M9^DM zKBx>-2l@c&1oeZygQh{tpdHW&7!8aECI#OFGl4n5LSSjIGFTIA1hxh{f<3{{!LPva z;0$mfxElNc+yx#6Pk~p#`)B|fE*d%7Ei`sCAv75@H8g!RD>NrGAGA=kShNhZVzl>Y z9cY7SQ)p{w#}Et%2?PpZhloNHAX*R@#1Y~Hc?n5`i=KmCh2D-nj6RQkfPsNQj=_u}h@pU?hhdB1h4B(21)~I`1*0Eh z7Gob16O$5?6;m8j4bu$M88Z+w0kaUZ8FK)09`gtb7mF5)2TKl1AIl!gA1fB?9aa<8 z0M;VbDK;TCBen>(8ny+t2X+K@7WRAWKJ0nyQyd~3W*l)GO&nXCXE^aV#W?La<2bvx zxVUtUg729wcvfn+r`JnXTq1l*T;9p ze}$iq--b0ERuGTc~T5gW>Q5`ThcJnBGO*cEiz&xUFKD5NMXDMBeqD26FcD4~@1DD5a;Q`S)apn_1bP(7q_ zqe`V}r&_x~dPDRE>_+H~@*7BMFf|LcI<*&dCUrOU{!N;j@;4vfOt{&4bB%_aMvBIk z<_%2~%`z+P-HTc>o)bXs)&bR~2@ z=yB+U=&k7A(0`=gVxVQX&*05az<^}LW)xzyVT@z!U_4}EX3}8_Vya?7Xe_QglWND!>Y7O=0b4LuV6avuDd- z8)e61mu7cmFJPbMAm>ow@aL%E*x+Q~)aQK7*}-|i#n1JKD~oH4o0waP+n@VA_YMyW z4~!>?XNVV{SB}@0x0ZLCkCo4oFO}~bKMDVR{viI3{O1CK0!{+O0?UF7f~JDWf}=vD zLJx#q3Vjwv7rra(E8HM_EFvJ{EK)AADatNtC;CowNsL*{QY=esR-8`UO#H3*lmt}5 zR3cqsO7fPZnPi6Kj1;|;g;b8zqVyeUTj@gSjk{cTo$glMJ(LlVc`DN)izX{C8!Fp- zkNBR}y~KMHa&&Umas_f*^8E5%@+}JJ3d#zv6-E_rD#8@=6}OZGm7XfKDdQUQZ->B04C^)dCe^>g(1 z4elAl7|a{;8wMJV7%>~U8+95}89y>^G$AlCGpR5|H`OtHXL@F)W|m>LZ?0&bY`z7P zfyKdAEu<{oSS(wLTSi$fT8UdlSuI(MTSr?j+eq5P+N{B4;EC{UTLs%R+e14wyIi}= zM>>y65LgIPM4dgcy`6oV1C4{bL;qve$AOQh97P;s9Jid5opPRlo)|r;btXj_Q{67N zU0%3MyGpnwxgNP`yH&Uox!b#Ud$4$fcr1F#d1iY-ykK4*y>EFx^PYYx{q(I5$j990 zqc6ShbKiMCdB418IM3{!_4sr7NBQps=mflfe)GBC^Vt{jFA4&$1v&+e28jlx1w(@2 z!M!28AqgQDp%$TE!nnd>!_Hp9UVaJZ4v!DNd}Z~jH$osHH4-DzK62!>a-JL-241>gdgg5^TP!mmZLMYYB3#cxZ=m6+#uom5i0i zRU}oR)u3vR>a7}^nyFg7+WtDFx{vQg-&fUh)aN$bYDj7%Ym8{ZX?ost+3eZ8-}1O+ z?Su7)*^ee4$69q;huR*t^|mXwfBq!*skKA8qxrM==Y~#^&blu`UuwDpx~jYRyQ_Nm zd#ZW`daL^c`)a=me|_IC*55QBIq+dncJR}X;!xMH>Tv&v*2uR}!_ld47T=b>Kl;9n zbVZ(y`HiEGhyEb^5j#OWkuiB^vSdnNs&QI&x_d@rW^5KVyE^w|?ri?~0{%kmBJE=S z63&Y9pH!3%!HoLcUx8}EEavJGWsfKZ~LY=^7u&aZ%K34)G+iG__rh{^+l(7+H> zKu1GIWux+lAn3QaiKQ_}9-3j&@i>y+efFB3SKXY9;ceN6Cs7$#j86Xj|AF66u2&WR zY~&Y_Ncs{9;Gv*yaKm=VHF(Bf2q?a0t zaq#uS>S=1amD!v7->jrx=^q5bW3eOcy1C0$%FrmFL{(DgZ?&aR4ACp|uoUpj2lD=f z`Tyf3*v!Sul#(cW1_<=bsIm_AzZFZeWErY(r^4=pEYUxjMWtMY8(hK0%NEswqZCzH z0L@^8a{J-l{nE-HMXxx}La#^yu;yriUK#<}4cz75ga0oDA<5#%gZ{T=(MMjGxuZ{~ zmbT)531GAxD?%Vgu;?*?!vEAX$#A0J1kq|E&zaGa+xe zuG#5_TZt9pH*var%I9UP^G#jhR_l*uwR_%uyLr2usmI|V z`3Byum2fP3+5KnAU1`2}Be5}Sc;vQvWpLZi++V_!(zD)rJRrd>D+0QRo8q-YFf5ds zvNk}Lt9TMw_n$=#j8ta7{I3M~lLqle8KVHeEcFaQ1%V?NK*W(0Eq@mHPgtLv1gPZ1 zDIvt$k3~ICW%$sn%8_Aw@4n>;oU40&(@MZ-`w@u1vDaN_DVi_fY0M6k_V4ED;_85Q zu<)=#-w~rxeFaLd*m9TO#v%qo(*IKvzX<5hG_yq@RJ!QSZ~U$(SOZd5iLAfhRr2pb zycAy8-N;goJ`*;=E(0_x%Gvw6mAq{M=I_VE_%rloTE4uCwvyB_wKPpo`5tOP7E7sb z`AYg#w|cqX3rkDX&6xohYNEf8(gT1+0KI^w^nw{A#r+$kmhmx6!i{!T4mpx3VAS(L6_ zz}W28cEA_UG({%e;bprafV+-^021yBg!_L%01Q&NEI?@o@QJ2uLbyK#0OmXwbK%hB~$ZboHA5cF6x@MS%Q!m6Urn|DYPEA(PPY)QJ7NSZe7)`n^gUGLm#cW(9y4 z>w15>rXe~>wx5pTfYe>SQkFjxuV+UqbHAc*qtCyE!Q;(=)4Gn0j+%)dG0OnVo?Qy(s-T^I^AE)QDTF0&1 zc0INOdX=fG9jIb!x&LmhIvkt{#e*B7^T8jJp`KJaad!} zcz{nlP}1u|^ip}KDj7&VoG_cOES!0$4z2(XOdi;Rq!Co;vP)l~|N4jn>5+q^;UH;C zsVlC31zj?7Dd=C=r>x`IP)En92*s96NdzFwH(Ns=UgOi?)BnBRm@lAH?Pk7@;P;J7 zAaLz#*C)(gUdM|*?lc0Ar=qW)%^eGYc4_2phaY$t-=me8HyfFdiB=sTKu>KPUv~50 z9}IzhWY3g(=UhpJPF#wG>fm3EqO39-KiRv^on*24v!z^cs=-W(+@t0s<8^(OM^^V zU%3-4hSEtX`D~>l6bG4e9;R!^CGg+b`^>dux!0L)M(OMayDo=PA$qCea0c}I#CfQN zj}Uwx3Q3g0g=2wkEBsu02^r8WwX*+N_=%tUcixpE1e59gMe{jo52|!^bu?3Dvp>Ld z{6^Xlu(s4eyS8NBeyx#P=W%ZYznGgK=XEuYMY+#z}EgSs0*}H`TY% zC<$$XEe81TJY`rw;YKoa=^e`(#R-vk*h3{$v29X(Ii&XY^#_5DZ0A}$^PO}6!1ecE z`uf|*0>8ie8C|xB44t@-qDZ1AeikX+$G75(ZHZ`aKuZi9E}al-)i)(X4ays!{0kfS z0ho~(@Ize!0PO(YgU#vSxEuJeim%g3q7-)GDap=j3ucAOlkM6VxEdAFsVR#UL;5Mn zg-46Ewa1qLM+sVY1ZVCpcW;`+!tBnte3x)l>SoH$^87xBy(DMaF88XfghOYEhlh86 zQDX^9TK=3c(H!-&+bGQyfiNq>5#U7C1ilpTd!>^okhVfT(ez`5*!$oD_T`w2^qjb0 zgMkK{>w6_xo-1ia66u|~)}b;t*&|lQb90f>uWUmCduwp?(?`=PsF!1hV>x5I)NC-G zZ&*KQ*j``W+8?KhvFlw&-b|GTzh4KA?-$q>P;Sy}nth%+Pxa*_hkc_g-Cba=uTnX3 zl3xgVS$*fZ4*Ti`fnHqBOoM&YZbGd`naY9v^a7GewDB5;Hrwk0DKT-U`vzK#ma9&C z*G>S;V&spq1 zQ)DIZDU&4%Cs>ydpoeQKMCzgj4;yqXjfRy&eZQea+{p1>(YsIc>$_*1L+;~BR$U5( z$U!1CpFYrlXNr5ng@E1Yu%U+?JfcvxX>j<0q2o)=aw5Bd31jo2f$8y!e0_U%s`xu% z9)}(m)*OgfWE}0H!3sh8WJE`mmFw1cUZF(_D|Pbw(Rcbal}N9EE8RgYtZJ50f8WWN zdlh)1M`rEq*Dh`=iPol!b4^c25JX>&z`ZEA2BCLL9#8&+l z8qRoU2TLv1Cexe?DP5G+ZluuCFcNvq#j(5M6S=Zwwtnn9n(ZA0`QpgAvDZ8!Nl5AM z)t*(0k@Fi5@R#RQ%Dh+k{j85;PYQO~+R(%-YldTmuSd8hN)ML^Z2icU5Jx8a#0&|G z9t&|suj`JbBwc$%iBO4OS03#_P{m^wcXYQpa8%Q1<2NBl*oJ#-FuyzQW>(jW#P5!5 z--!FfwOgY1YE!0TB~=i5VtKUpd3tfG?UX)z$c~#fVF{j^K>v*fjZ^Jlu+Ms`$GT#* z<^zdn5WOHd11(L{4K1?9RnE7TQx4x3pFCz?2L?a%R#|tAY@fW~Br=dy5u;HRFJR-Z zT85rT7$<$4YwNKdhAYxS`l{jOz7 zp{Js8B$7FUn*@~IOUZ?_iDfG#BcQisz55f<`GLbuBho2|Ws`K=yzqijJ>m=|X`Y;Z zo{p6b+@APz^}_G>1DNKG^88F}-$Fa?JXZqM8E<73Xq%{@QAKrf`N7CF(X~OEAGI(P z^mKKJSa@#Z@idoL>x+TQ!%NtVr^;W3Dln15^g*V86qr#n9i=%WkQ{9Edov{Iu>WW+ z_^NWt)P)LiNC>%ZRmj`n)gSTAn1zf6d6BToT>=&I%z>9cO$gkQ$|F_tAkKfG=~?HY zyXqshC*B>Y$2B5iO>cW6IFoi^UXQ%%lNO8#qHoS`p1de9YI6JBMP9i?z0MZ%fe2R? zfj1@p93IQc^P`w%YVnhJP1*K>^JEbm&vj0{X{yUm)87e}86F+S%i&Uv(x1+*2y2$( zb#}!!;9d9wgl2|y?YO-|x79crg&hLk z&&z}PYdZ<=U1}s__9=@_y-HO@=Eq(AymgqV_S5hclHWWHkW|ag@DhvQ%+W6s@q1i~ z(o;_#L7he~2gkj*urB|hH0;@_Ig3uR4#mp8;9!*1Wj6JM&T4pXY^|&HOyVdkZ)9|8 ztK2Hfqf*|w|AOeqD`&Px<%faKprP^P@M%egw@k;(bhc3RD{fhz(2oz#O6I-!M{0Ev ztv>KodW1aQG3$BdV%uDvJR$ipjnI7WiBM&+;;Ye-?BmH9-~G&_Be*UhHvK*2g7DtuN+k7ww?5Ag4adXMKzt`7qql3$PjL?N2~y~+@jQHO4c%|KpQ+`bp45V-FT0T&@QdUrGc~`9+d#OrU5l_ho|63Vd#I?8*<||+wc&&H>4UX!xr0Q#TTO#qNQ_kLXabV1knzSz zI)0Lxu9KPv?Sa)BWj(W=F9*tad5+?ASK^mff@2+medtRTf-9!ZimeO}6A~UhdLmrY z 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 literal 0 HcmV?d00001 diff --git a/routes/artists.js b/routes/artists.js new file mode 100644 index 000000000..cc7ad5544 --- /dev/null +++ b/routes/artists.js @@ -0,0 +1,35 @@ +'use strict'; + +const express = require('express'); +const router = express.Router(); + + +const SpotifyWebApi = require('spotify-web-api-node'); +const clientId = '5db9edca966a4673b5d8ce982ee4df1f'; +const clientSecret = 'f8fa62946c5d4f94b9ba9a91810e5eac'; + +const spotifyApi = new SpotifyWebApi({ + clientId : clientId, + clientSecret : clientSecret +}); + +// Retrieve an access token +spotifyApi.clientCredentialsGrant() + .then( data => { + spotifyApi.setAccessToken(data.body['access_token']); + }) + .catch(error => { + console.log('Something went wrong when retrieving an access token', error); + }) + +router.get('/', async (req, res, next) => { + try {const title = req.query.title; + const artists = await spotifyApi.searchArtists({title}) + res.render('artists', artists) + } + catch (err) { + console.log("The error while searching artists occurred: ", err); + } +}); + + module.exports = router; \ No newline at end of file diff --git a/routes/index.js b/routes/index.js index 01aa75e43..50871d31c 100644 --- a/routes/index.js +++ b/routes/index.js @@ -1,8 +1,10 @@ +'use strict'; + const express = require('express'); const router = express.Router(); router.get('/', (req, res, next) =>{ - res.render('index', {title: 'Express'}); + res.render('index'); }); module.exports = router; \ No newline at end of file diff --git a/views/artists.hbs b/views/artists.hbs new file mode 100644 index 000000000..077a427a4 --- /dev/null +++ b/views/artists.hbs @@ -0,0 +1 @@ +

Hello

\ No newline at end of file diff --git a/views/index.hbs b/views/index.hbs index 632605f03..10d58fdf2 100644 --- a/views/index.hbs +++ b/views/index.hbs @@ -1 +1,4 @@ -

Welcome to {{title}}

\ No newline at end of file +
+ + +
\ No newline at end of file From 26575179aef9cd366ac658e869d7330d6aeed50a Mon Sep 17 00:00:00 2001 From: Alejandro de las muelas Date: Sun, 21 Jul 2019 16:20:38 +0200 Subject: [PATCH 2/3] finished structure --- app.js | 36 ++++++++++++++++++++--------------- helpers/spotify.js | 19 ++++++++++++++++++ public/images/11.jpg | Bin 0 -> 13652 bytes public/stylesheets/style.css | 23 ++++++++++++++++++++++ routes/albums.js | 17 +++++++++++++++++ routes/artist.js | 20 +++++++++++++++++++ routes/artists.js | 35 ---------------------------------- routes/index.js | 2 +- routes/tracks.js | 17 +++++++++++++++++ views/albums.hbs | 17 +++++++++++++++++ views/artist.hbs | 15 +++++++++++++++ views/artists.hbs | 1 - views/index.hbs | 14 ++++++++++---- views/not-found.hbs | 1 + views/tracks.hbs | 14 ++++++++++++++ 15 files changed, 175 insertions(+), 56 deletions(-) create mode 100644 helpers/spotify.js create mode 100644 public/images/11.jpg create mode 100644 routes/albums.js create mode 100644 routes/artist.js delete mode 100644 routes/artists.js create mode 100644 routes/tracks.js create mode 100644 views/albums.hbs create mode 100644 views/artist.hbs delete mode 100644 views/artists.hbs create mode 100644 views/not-found.hbs create mode 100644 views/tracks.hbs diff --git a/app.js b/app.js index ba66e471c..6190e7683 100644 --- a/app.js +++ b/app.js @@ -5,12 +5,13 @@ const express = require('express'); const path = require('path'); const cookieParser = require('cookie-parser'); const logger = require('morgan'); -const hbs = require('hbs'); + const hbs = require('hbs'); - -const indexRouter = require('./routes/index'); -const artistsRouter = require('./routes/artists'); + const indexRouter = require('./routes/index'); + const artistRouter = require('./routes/artist'); + const albumsRouter = require('./routes/albums'); + const tracksRouter = require('./routes/tracks'); const app = express(); @@ -25,22 +26,27 @@ app.use(cookieParser()); app.use(express.static(path.join(__dirname, 'public'))); app.use('/', indexRouter); - app.use('/artists', artistsRouter); + app.use('/artist', artistRouter); + app.use('/albums', albumsRouter); + app.use('/tracks', tracksRouter); // catch 404 and forward to error handler +// NOTE: requires a views/not-found.ejs template app.use((req, res, next) => { - next(createError(404)); + res.status(404); + res.render('not-found'); }); - // error handler +// NOTE: requires a views/error.ejs template app.use((err, req, res, next) => { - // set locals, only providing error in development - res.locals.message = err.message; - res.locals.error = req.app.get('env') === 'development' ? err : {}; - - // render the error page - res.status(err.status || 500); - res.render('error'); + // always log the error + console.error('ERROR', req.method, req.path, err); + + // only render if the error ocurred before sending the response + if (!res.headersSent) { + res.status(500); + res.render('error'); + } }); - module.exports = app; \ No newline at end of file +module.exports = app; \ No newline at end of file diff --git a/helpers/spotify.js b/helpers/spotify.js new file mode 100644 index 000000000..3d613a605 --- /dev/null +++ b/helpers/spotify.js @@ -0,0 +1,19 @@ +const SpotifyWebApi = require('spotify-web-api-node'); + + const clientId = '5db9edca966a4673b5d8ce982ee4df1f'; +const clientSecret = '4c01abef01bd4c29b12a80d5557639f1'; + + const spotifyApi = new SpotifyWebApi({ + clientId: clientId, + clientSecret: clientSecret +}); + + spotifyApi.clientCredentialsGrant() + .then(data => { + spotifyApi.setAccessToken(data.body['access_token']); + }) + .catch(error => { + console.log('Something went wrong when retrieving an access token', error); + }); + + module.exports = spotifyApi; \ No newline at end of file diff --git a/public/images/11.jpg b/public/images/11.jpg new file mode 100644 index 0000000000000000000000000000000000000000..efcc7708511dacf2c73e4c03e7cb50166ab56170 GIT binary patch literal 13652 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 literal 0 HcmV?d00001 diff --git a/public/stylesheets/style.css b/public/stylesheets/style.css index d0c398ec3..e7520b6b2 100644 --- a/public/stylesheets/style.css +++ b/public/stylesheets/style.css @@ -87,4 +87,27 @@ display: flex; flex-direction: column; padding: 1rem 0.75rem; +} + +.grey-bg{ + background-color: gray; + text-align: center; + color: white; +} + +.grey-bg p,button{ + margin: 0; +} + +.grey-bg button{ + color: white; + padding: 0.2rem 1rem; + font-weight: 600; + letter-spacing: 2px; + text-transform: uppercase; + border: 1px solid transparent; + border-radius: 700px; + cursor: pointer; + background: var(--primary-color); + margin-bottom: 5px; } \ No newline at end of file diff --git a/routes/albums.js b/routes/albums.js new file mode 100644 index 000000000..a505cb1c0 --- /dev/null +++ b/routes/albums.js @@ -0,0 +1,17 @@ +const express = require('express'); +const router = express.Router(); + + const spotifyApi = require('../helpers/spotify'); + + router.get('/:artistId', async (req, res, next) => { + const { artistId } = req.params; + try { + const albumsArray = await spotifyApi.getArtistAlbums(artistId); + console.log(albumsArray.body.items); + res.render('albums', { albums: albumsArray.body.items }); + } catch (error) { + next(error); + } +}); + +module.exports = router; \ No newline at end of file diff --git a/routes/artist.js b/routes/artist.js new file mode 100644 index 000000000..07ede6d89 --- /dev/null +++ b/routes/artist.js @@ -0,0 +1,20 @@ +'use strict'; + +const express = require('express'); +const router = express.Router(); + + const spotifyApi = require('../helpers/spotify'); + + //como pilla la instancia del fichero helper??? + + router.get('/', async (req, res, next) => { + const { artist } = req.query; + try { + const artistArray = await spotifyApi.searchArtists(artist); + res.render('artist', { artist: artistArray.body.artists.items }); + } catch (error) { + next(error); + } +}); + +module.exports = router; \ No newline at end of file diff --git a/routes/artists.js b/routes/artists.js deleted file mode 100644 index cc7ad5544..000000000 --- a/routes/artists.js +++ /dev/null @@ -1,35 +0,0 @@ -'use strict'; - -const express = require('express'); -const router = express.Router(); - - -const SpotifyWebApi = require('spotify-web-api-node'); -const clientId = '5db9edca966a4673b5d8ce982ee4df1f'; -const clientSecret = 'f8fa62946c5d4f94b9ba9a91810e5eac'; - -const spotifyApi = new SpotifyWebApi({ - clientId : clientId, - clientSecret : clientSecret -}); - -// Retrieve an access token -spotifyApi.clientCredentialsGrant() - .then( data => { - spotifyApi.setAccessToken(data.body['access_token']); - }) - .catch(error => { - console.log('Something went wrong when retrieving an access token', error); - }) - -router.get('/', async (req, res, next) => { - try {const title = req.query.title; - const artists = await spotifyApi.searchArtists({title}) - res.render('artists', artists) - } - catch (err) { - console.log("The error while searching artists occurred: ", err); - } -}); - - module.exports = router; \ No newline at end of file diff --git a/routes/index.js b/routes/index.js index 50871d31c..090bc8f13 100644 --- a/routes/index.js +++ b/routes/index.js @@ -7,4 +7,4 @@ const router = express.Router(); res.render('index'); }); - module.exports = router; \ No newline at end of file + module.exports = router; \ No newline at end of file diff --git a/routes/tracks.js b/routes/tracks.js new file mode 100644 index 000000000..adec9a304 --- /dev/null +++ b/routes/tracks.js @@ -0,0 +1,17 @@ +const express = require('express'); +const router = express.Router(); + + const spotifyApi = require('../helpers/spotify'); + + router.get('/:albumId', async (req, res, next) => { + const { albumId } = req.params; + try { + const tracksArray = await spotifyApi.getAlbumTracks(albumId); + console.log(tracksArray.body.items); + res.render('tracks', { tracks: tracksArray.body.items }); + } catch (error) { + next(error); + } +}); + +module.exports = router; \ No newline at end of file diff --git a/views/albums.hbs b/views/albums.hbs new file mode 100644 index 000000000..ecc198a29 --- /dev/null +++ b/views/albums.hbs @@ -0,0 +1,17 @@ +
+

Albums:

+
    + {{#each albums}} +
    +
  • + {{!-- 'images.1' acces array images, index 1 --}} + {{this.name}} +
    +

    {{this.name}}

    + +
    +
  • +
    + {{/each}} +
+
\ No newline at end of file diff --git a/views/artist.hbs b/views/artist.hbs new file mode 100644 index 000000000..87a9603cb --- /dev/null +++ b/views/artist.hbs @@ -0,0 +1,15 @@ +
+

Artist:

+
    + {{#each artist}} +
    +
  • +

    {{this.name}}

    + {{!-- 'images.1' acces array images, index 1 --}} + {{this.name}} + View Albums +
  • +
    + {{/each}} +
+
\ No newline at end of file diff --git a/views/artists.hbs b/views/artists.hbs deleted file mode 100644 index 077a427a4..000000000 --- a/views/artists.hbs +++ /dev/null @@ -1 +0,0 @@ -

Hello

\ No newline at end of file diff --git a/views/index.hbs b/views/index.hbs index 10d58fdf2..4468b4238 100644 --- a/views/index.hbs +++ b/views/index.hbs @@ -1,4 +1,10 @@ -
- - -
\ No newline at end of file +
+

Spotify

+ {{!-- El atributo 'action' define el lugar donde los datos se envian --}} +
+ +
+
\ No newline at end of file diff --git a/views/not-found.hbs b/views/not-found.hbs new file mode 100644 index 000000000..4144f40ce --- /dev/null +++ b/views/not-found.hbs @@ -0,0 +1 @@ +

500 Server Error

\ No newline at end of file diff --git a/views/tracks.hbs b/views/tracks.hbs new file mode 100644 index 000000000..dacdca7a7 --- /dev/null +++ b/views/tracks.hbs @@ -0,0 +1,14 @@ + +
+

Tracks

+
    + {{#each tracks}} +
    +
  • +

    {{this.name}}

    + +
  • +
    + {{/each}} +
+
\ No newline at end of file From c2d061399ec5031e28c88dac20cdd6c8146493e0 Mon Sep 17 00:00:00 2001 From: Alejandro de las muelas Date: Sun, 21 Jul 2019 18:42:05 +0200 Subject: [PATCH 3/3] finished --- public/stylesheets/style.css | 39 +++++++++++++++++++++++++++++++----- views/albums.hbs | 4 ++-- views/artist.hbs | 8 +++++--- views/layout.hbs | 1 + views/tracks.hbs | 8 +++++--- 5 files changed, 47 insertions(+), 13 deletions(-) diff --git a/public/stylesheets/style.css b/public/stylesheets/style.css index e7520b6b2..fc3e3dc5e 100644 --- a/public/stylesheets/style.css +++ b/public/stylesheets/style.css @@ -24,6 +24,7 @@ h1{ color: var(--primary-color); text-align: center; + font-size: 50px; } a { @@ -87,7 +88,33 @@ display: flex; flex-direction: column; padding: 1rem 0.75rem; -} + align-items: stretch; + } + + .song-name{ + grid-area: song; + text-align: start; + } + + .audio-control{ + grid-area: audio; + } + + .grid-wrapper{ + display: grid; + grid-template-columns: 3fr 1fr; + grid-template-rows: auto; + grid-template-areas: + "song audio"; + justify-items: center; + background-color: rgb(241, 242, 243); + + } + + .article-tracks{ + margin: 0 10px; + padding: 0; + } .grey-bg{ background-color: gray; @@ -95,11 +122,12 @@ color: white; } -.grey-bg p,button{ +.grey-bg p,.button{ margin: 0; } -.grey-bg button{ +a.button{ + appearance: button; color: white; padding: 0.2rem 1rem; font-weight: 600; @@ -109,5 +137,6 @@ border-radius: 700px; cursor: pointer; background: var(--primary-color); - margin-bottom: 5px; -} \ No newline at end of file + font-size: 10px; + text-decoration: none; +} diff --git a/views/albums.hbs b/views/albums.hbs index ecc198a29..c652f5b57 100644 --- a/views/albums.hbs +++ b/views/albums.hbs @@ -1,5 +1,5 @@
-

Albums:

+

Albums

    {{#each albums}}
    @@ -8,7 +8,7 @@ {{this.name}}

    {{this.name}}

    - + View Tracks
    diff --git a/views/artist.hbs b/views/artist.hbs index 87a9603cb..712c6fcbd 100644 --- a/views/artist.hbs +++ b/views/artist.hbs @@ -1,13 +1,15 @@
    -

    Artist:

    +

    Artist

      {{#each artist}}
    • -

      {{this.name}}

      {{!-- 'images.1' acces array images, index 1 --}} {{this.name}} - View Albums +
      +

      {{this.name}}

      + View Albums +
    • {{/each}} diff --git a/views/layout.hbs b/views/layout.hbs index 4315f2c3b..1baac3fb2 100644 --- a/views/layout.hbs +++ b/views/layout.hbs @@ -5,6 +5,7 @@ +
      {{{body}}}
      diff --git a/views/tracks.hbs b/views/tracks.hbs index dacdca7a7..fbea2bc99 100644 --- a/views/tracks.hbs +++ b/views/tracks.hbs @@ -3,10 +3,12 @@

      Tracks

        {{#each tracks}} -
        +
      • -

        {{this.name}}

        - +
        +

        {{this.name}}

        + +
      • {{/each}}