Тёмный

Node.js Crash Course Tutorial #10 - Get, Post & Delete Requests 

Net Ninja
Подписаться 1,5 млн
Просмотров 232 тыс.
50% 1

In this node.js tutorial we'll set up some route handlers for different request types. We'll also look at how to handle post requests and delete requests.
0:00 -- request types
3:56 -- post requests
11:55 -- route parameters
20:12 -- delete requests
🐱‍👤🐱‍👤 JOIN THE GANG -
/ @netninja
----------------------------------------
🐱‍💻 🐱‍💻 My Udemy Courses:
+ Modern JavaScript - www.thenetninja.co.uk/udemy/m...
+ Vue JS & Firebase - www.thenetninja.co.uk/udemy/vu...
+ D3.js & Firebase - www.thenetninja.co.uk/udemy/d...
🐱‍💻 🐱‍💻 Course Files:
github.com/iamshaunjp/node-cr...
🐱‍💻 🐱‍💻 Other Related Free Courses:
+ Modern JavaScript Tutorial - • Modern JavaScript Tuto...
+ HTML & CSS Crash Course - • HTML & CSS Crash Cours...
🐱‍💻 🐱‍💻 Node.js links
+ Download here - nodejs.org/en/download/

Опубликовано:

 

19 июл 2024

Поделиться:

Ссылка:

Скачать:

Готовим ссылку...

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 360   
@mouhamethfadalmarabyaidara4935
@mouhamethfadalmarabyaidara4935 3 года назад
I swear this tutorial is far better than the premium (paid) ones that we see on Udemy or other e-learning platform. You are so much knowledgeable about the topics that i'm just stunned . Big respect for you and thanks for changing the lives of thousands of software engineers by making them understand actually the core concepts.
@niteshswarnakar
@niteshswarnakar 3 года назад
exactly
@zachfenton608
@zachfenton608 2 года назад
no adds, no rubbish, just a nice london accent
@rogut8
@rogut8 Год назад
could not agree more
@SALMANKHAN-zz4gi
@SALMANKHAN-zz4gi 3 года назад
i feel butterflies in my stomach . the excitement of understanding the concept and yearning to apply it to a project is too much . Thanks ninja
@NetNinja
@NetNinja 4 года назад
Make sure you place the blogs/create GET route ABOVE the /blogs/:id GET route in the code. Otherwise express will fire the /blogs/:id handler for requests to /blogs/create.
@TechnoDB
@TechnoDB 4 года назад
Oh... I was stuck at this and it took my time. Also, you've mentioned this stuff in your next video. :v
@ashishchourasia2830
@ashishchourasia2830 4 года назад
I am getting 'TypeError: Cannot read property 'id' of undefined' at the params line. VS code wasn't showing the intellisense for it. Please help
@andressiri
@andressiri 4 года назад
@@ashishchourasia2830 what fix this for me was going back to index.ejs and on the tag make sure the href link has the same spacing with the ejs tags like in the video.
@LavishArora11
@LavishArora11 4 года назад
Thanks man, that's where it got stuck.
@krasimirkraev8716
@krasimirkraev8716 3 года назад
I dont get this. Can you explain a bit more please.
@layeekromah4799
@layeekromah4799 4 года назад
This is by far the best crash course ever, feels almost like the best premium course on nodejs. The style of teaching rocks!
@Shakeel714
@Shakeel714 3 года назад
This series on NodeJS is better than any other series/course on YoutTube or Udemy
@matthew78uk
@matthew78uk 3 года назад
So much content in a single video! All the basics of CR(U)D, organised and explained very well! Many Thanks indeed!
@davefinn6031
@davefinn6031 Год назад
Shaun you are a legend. I am in the middle of an intensive assessment for a position currently and everytime I run into a problem, be it in Vue, node js or SQL you seomhow seem to have the answer at some corner or the internet. Keep up the amazing work!
@malcolmcolindixon
@malcolmcolindixon 4 года назад
Great work as always Shaun, just completed your Udemy modern Javascript course a few days ago and then started this series, it's all coming together now. Would really like to see working with Postgresql sometime, I'm sure it's similar concepts to this though.
@LoveisHell85
@LoveisHell85 3 года назад
Please make a react/node/SQL tutorial. I would love to see a complete fullstack project (ecommerce site perhaps). I would be more than happy to pay for a premium course. Thank you for the great content!
@pwrs7
@pwrs7 7 месяцев назад
Loved the content. Gave me great learning over the weekend. I loved how he builds the pieces early on and how they all come together at the end to form an application. Not only gives you the details on how it can be done, but also why things are done the way they are done. Loved it. Huge thanks.
@NetNinja
@NetNinja 7 месяцев назад
That's awesome to hear :) thanks so much for watching
@LucXX36
@LucXX36 4 года назад
Great, like always. Thank you! This whole course is such a nice refreshing
@stana_andrei4752
@stana_andrei4752 4 года назад
Can you make a tutorial on how to connect a react component with node backend?
@dnynu
@dnynu 4 года назад
Yaa I also want 👍
@F4ILCON
@F4ILCON 4 года назад
Keep in mind that this is server side rending using EJS, nodejs render html to the browser, now React, Angular, Vue they have different approach, so you need to make http request from react to reach the routes in nodeJS, you also probably need set CORS on nodejs. Create nodejs Server with route and react app to call these route.
@AccessCode101
@AccessCode101 4 года назад
@@F4ILCON Sounds like you know what you're talking about. Can you make a quick video, please!
@alexanderbugay6752
@alexanderbugay6752 4 года назад
Maybe you might want to check out some videos on the topic from another coding guru: Part 1: ru-vid.com/video/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-XuFDcZABiDQ.html Part 2: ru-vid.com/video/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-KyWaXA_NvT0.html He also has MERN stack mini series which I found really useful. Though NetNinja's accent is 1000 times better so I'm also waiting for this tutorial
@jmbeatsbbx
@jmbeatsbbx 4 года назад
Which Node features would you use if you had React already tho?
@stanisawjarocki1747
@stanisawjarocki1747 Год назад
// If you get error around 19:11, which looks like this: CastError: Cast to ObjectId failed for value "style.css" (type string) at path "_id" for model "Blog" // Then simply remove from details.ejs // I don't understand why, but with only this: const id = req.params.id; console.log(id); // id looks fine, but when you add this below: Blog.findById(id) .then((result) => { res.render("details", { title: "Blog Details", blog: result }); }) .catch((err) => { console.log(err); }); // another id shows up in console: 6308f2bbcb373829482ab874 style.css // Is anyone able to explain this?
@adetunjiojekunle1502
@adetunjiojekunle1502 Год назад
I have this same error as well
@adetunjiojekunle1502
@adetunjiojekunle1502 Год назад
[SOLVED] add '/' before styles.css in head.ejs, so you have it as '/styles.css'
@dolusdirectu
@dolusdirectu Год назад
@@adetunjiojekunle1502 Thx m8
@prismanic24
@prismanic24 Год назад
Took me an entire day to figure out why I was getting this error, thanks!
@ericpodhorecki5427
@ericpodhorecki5427 3 года назад
best node course online from far. Amazing work!!
@NetNinja
@NetNinja 3 года назад
Thanks so much :)
@mikoajpaszkowski2985
@mikoajpaszkowski2985 3 года назад
I just LOVE that moment when I need to pause the video to say: "Ahaaaaaaaaaaaaa, it's amazing!"
@NetNinja
@NetNinja 3 года назад
Thank you so much!!
@tannerbarcelos6880
@tannerbarcelos6880 3 года назад
Was trying to do MERN stuff before really getting my node, express and mongodb core skills down. Realized I was just copying tutorials and not learning. I am gonna watch this whole series and learn a ton. Just from laying here watching this, I understood everything from past knowledge or just good JavaScript skills and it’s exciting because I’m really trying to learn fullstack development while also learning it in school academically. Thank you for all your videos brother !
@kithenry
@kithenry 6 месяцев назад
i like how structured this is, how every topic from #1 to #last builds so well onto each other.
@NetNinja
@NetNinja 6 месяцев назад
Thanks :) that means a lot
@iamabhirupdatta
@iamabhirupdatta 3 года назад
If anyone getting undefined value in req.body for the post request , add the following before any route: app.use(express.urlencoded({extended: true})); app.use(express.json());
@vladdobritoiu4187
@vladdobritoiu4187 2 года назад
@Ahmed Haron this comment should be pinned
@raihanar5323
@raihanar5323 8 месяцев назад
@@vladdobritoiu4187yes should be pinned
@raihanar5323
@raihanar5323 8 месяцев назад
pin this
@LuisVictorSilvaSantos
@LuisVictorSilvaSantos 5 месяцев назад
ty sir
@theone3746
@theone3746 Год назад
Even though these videos are long, there is not one second of fluff. Beautiful.
@elpheno
@elpheno 4 года назад
This session was more difficult for me; I 'll try again later. Thank you Boss
@mikegogl
@mikegogl 3 года назад
Thanks man you are fantastic. I am learning a lot. Honestly, thank you!
@codedynamics1
@codedynamics1 3 года назад
@netninja how excited you get when something works 😂👨‍💻 love it!!😂
@vally8027
@vally8027 2 года назад
very exciting, you are the best instructor, thanks for considering this topic
@mrmeinept
@mrmeinept 2 года назад
That feeling when you spend 2 hours reading tutorials that aren't helpful and then find that one video who helps you in less than 30 minutes:
@LubieArbuzy
@LubieArbuzy 4 года назад
Great content as always!
@kopilkaiser8991
@kopilkaiser8991 2 месяца назад
Brilliant tutorial. I've learnt quite a lot from watching this. I would highly recommend all to watch this excellent informative and simple node.js crash course 😊🤝 You are a brilliant and exceptionally great teacher. Being able to convey your knowledge by explaining patiently.
@NetNinja
@NetNinja 2 месяца назад
That means a lot, thank you so much :)
@darpananeja4751
@darpananeja4751 2 года назад
Beautiful course!!! Amazing satisfaction!
@zachfenton608
@zachfenton608 2 года назад
this is so awesome. I have learned a lot. I still have trouble with the mongodb not picking up the posts. I had to comment out all the code that related to it since it was crashing the app.
@martinsmifff
@martinsmifff 4 года назад
Hi Shaun, again a great tutorial. Did you know about the express middleware "method-override", is is quite neat because it allows you to simulate DELETE and PUT requests using the normal form, with just a hidden field. Tis would simply things a great deal as you wouldn't need to use the JavaScript.
@shaheryarshaikh2572
@shaheryarshaikh2572 3 года назад
Hey Can you help me how to use it?
@shaheryarshaikh2572
@shaheryarshaikh2572 3 года назад
@For Google Kuriwada thanks❤️i already Used it 9 months back still thanks
@papadong
@papadong 4 года назад
Nice tutorial as always. Thank you
@ArmanAghajanyan-eh1tn
@ArmanAghajanyan-eh1tn 3 месяца назад
Best ever tutorial. thank you Shaun Pelling. Huge contribution to learners!!!
@NetNinja
@NetNinja 3 месяца назад
Glad it was helpful! :)
@MuhammadZubair-co5jl
@MuhammadZubair-co5jl 3 года назад
Greate videos (Thank you ) Sir, It can be also done by putting a (href) property in a(anchor tag)and set it value to '/blogs', without redirecting to the blogs page using JSON (lots of steps involves).
@condensedmatter118
@condensedmatter118 2 года назад
Underrated comment. Not sure why he did it that way but this is ALOT easier.
@DylanL9
@DylanL9 4 года назад
Do you think you can create a tutorial about using node-fetch and creating a project where you would use a stock API for example?
@hackmeornot2196
@hackmeornot2196 3 года назад
I buy a lot of course in UDEMY, and I didnt understand mostly, and when i found shaun channel i regret in buying these course. THis channel teach me everything... can you make a single tutorial about local storage? Thank you so much shaun..
@thomasm1964
@thomasm1964 Год назад
Oooh my head hurts now! Content is excelletn as always but definitely need to play this one again!
@anthonyuzoka8294
@anthonyuzoka8294 6 месяцев назад
Seriously do you think i need another course on nodejs, this your crash course is the premium course for me, thank you
@samuelehnimely9297
@samuelehnimely9297 Год назад
Thanks so much for this course. It's so amazing. can you please consider implementing image uploading with node express and mogodb.
@visualismanformuslims673
@visualismanformuslims673 3 года назад
Ever best explaining, You are a great teacher, may Allah bless you. 😇
@husrevmustafalale2369
@husrevmustafalale2369 9 месяцев назад
I've recently started this tutorial series and I bet it's the most valuable tutorial even among the paid ones
@NetNinja
@NetNinja 9 месяцев назад
Hope you're enjoying it :)
@martinn1071
@martinn1071 3 года назад
This Is pure gold !
@Slimboyfat1979
@Slimboyfat1979 6 месяцев назад
Love your videos. Still relevant and helpful
@NetNinja
@NetNinja 6 месяцев назад
Awesome to hear :) love your username!
@LandusBakasima
@LandusBakasima 2 месяца назад
😂😂this man is a legend ..am now a back end developer in one day guys
@rodo200__
@rodo200__ 4 года назад
podrias hacer un curso completo de stack MEVN de Javascript y con estilos de Vuetify seria excelente
@spacecorp1669
@spacecorp1669 2 года назад
Why are we NOT updating a document ?
@bluemodize7718
@bluemodize7718 2 года назад
best tutorial i've ever seen
@yinonb172
@yinonb172 3 года назад
best node.js tutorial ever
@yusraalattar5593
@yusraalattar5593 3 года назад
You are simply the best!!
@pipertime1
@pipertime1 3 года назад
This is well taught! It's very complex! Why? It seems PHP can do all this much easier and not as complex. It's feels like trying to reinvent the wheel. It may just be me......... I have learned a lot from Shaun on Udemy!
@manasnagelia
@manasnagelia 2 года назад
Totally agree. PHP is easier. But, Node.js is faster than PHP, and PHP is getting outdated, so I suggest sticking with Node.js.
@chisangamumba2961
@chisangamumba2961 Год назад
Well, that's why you should create an Ajax Application. It ensures a complete separation of Client side code from Server-Side code. 🤷‍♂️
@someoneontheinternetuvenev6268
@someoneontheinternetuvenev6268 3 года назад
Awesome crash courses!
@valentinvalet2916
@valentinvalet2916 11 месяцев назад
thankl you for make uni a little easier for me
@MenaseDebel
@MenaseDebel 5 месяцев назад
express explained simply and clearly thank you NetNinjas
@NetNinja
@NetNinja 5 месяцев назад
Glad it was helpful!
@MenaseDebel
@MenaseDebel 3 месяца назад
@@NetNinja yeah i wonder if you work video on payment integration with MERN for e-commerse site
@huzaifashaikh6384
@huzaifashaikh6384 3 года назад
please make a series of node and react combined I can only understand your way of teaching on the whole internet. Love the way u teach it.
@bencepandi3568
@bencepandi3568 3 года назад
Any idea why do I get "undefined" when I try to console log the id? I have express, bodyParser, everything set properly.
@omarkouta9720
@omarkouta9720 2 года назад
I used another way to delete a blog... 1- clicking on the delete link in the details screen. 2- it deletes the blog from database with "FindbyIdanddelete(id)". 3- redirect to the main page ('/blogs'). And it works, but I don't know if it is okay or not. May be there is a problem I didn't notice. Please tell me Shaun if there is any problem in this way.
@sebastianmyrcha1034
@sebastianmyrcha1034 3 года назад
I am also a big fan of all of your courses. But I am not experienced and a little bit confused. After the Vue course I thought that the standard is to use frontend app in framework like VEU, and some backend app which REST API serving data in JSON format. After this course I am not sure, because there is a different solution. So which solution is better, and why. 1) Rest API with express.js and Mongo DB, and frontend application with VUE 2) Backend serving html pages with EJS view engine
@savagereg
@savagereg 4 года назад
Hello, Shaun. Where did you create the 'blogs' directory as in 'blogs/create'?
@silfion2395
@silfion2395 Год назад
Great tutorial, is there an example of put request with this type of logic?
@grandwizardnoticer8975
@grandwizardnoticer8975 3 года назад
How do we PUT, or otherwise edit and save an existing blog post? I have: * created an 'edit.ejs' based on 'create,' but with all textareas in the form. * put it in a sub dir to distinguish it from others for sake of the router. * added button to the details page that direct-links to edit.ejs: * used all textareas in form to get full, editable text back into form So the problem is that it currently creates a new, edited version of the original blog. What's the best way of getting it to update rather than create a new blog? Thanks!
@narimennari1207
@narimennari1207 Год назад
good job , it 's verry helpfull
@SENPAI-mi6sz
@SENPAI-mi6sz 2 года назад
what vscode theme you are using? and if u have time pls make a video about some useful vscode extensions. and ty so much for those courses
@rodo200__
@rodo200__ 4 года назад
aunque no entiendo ingles pero se ve excelente lo que haces, a cada palabra que hablas tengo que traducir y no encuentro cursos en español eres genio
@laxmanjonchhen6593
@laxmanjonchhen6593 3 года назад
Me encantó tu dedicación al aprendizaje, realmente te apasiona aprender.
@thatsalot3577
@thatsalot3577 Год назад
Hey, I was having sort of an error when I defined the app.get('/blogs/:id') before app.get('/blogs/create') as for no reason it was treating 'create' as an id however it works when I define the blogs/create above.
@priyadarsimishra7909
@priyadarsimishra7909 4 года назад
Awesome Video 👍, can you make a firebase/firestore + react native app
@daliusbeckjr.3918
@daliusbeckjr.3918 9 месяцев назад
is there an example of making an update route path. I don't know if I am on the right track with the one I made. nevermind :D I just figured out how to do an update method for my crud application. also thank you for the course. You are literally one of my top sources to go to when I am interested in learning more for the frontend in my full stack journey.
@joaomsemedo2080
@joaomsemedo2080 4 года назад
Very nice tutorial:)
@Samuel-ns5jb
@Samuel-ns5jb 2 года назад
Master Ninja, how did you learn all these stuffs? You are really really good.
@evilprince2009
@evilprince2009 3 года назад
Wow man , you are amazing.
@suatbayrak2703
@suatbayrak2703 3 года назад
30:15 so can we say if we make fetch requests from the front-end, we should respond it as json data from back-end ??
@SpiderWacho
@SpiderWacho Год назад
Hi! I had to trim the id with the trim method to pass it to the Blog model, did i do something wrong or there was a change on how the string from mongoDB is returned?
@ebiscaia
@ebiscaia Год назад
Hi mate, How could I use the contents of a div with the contenteditable="true" instead of a textarea? I would like to put a WYSIWYG app in there, but it always crash. Cheers,
@idontstudyforamidterm1069
@idontstudyforamidterm1069 11 месяцев назад
your videos help me sm man
@NetNinja
@NetNinja 11 месяцев назад
That's awesome to hear :) thank you
@rajithasri8426
@rajithasri8426 4 года назад
Hello sir, can u make MERN stack courese?
@zakhariihusar6975
@zakhariihusar6975 7 месяцев назад
I have a question about those dynamic routes like /blogs/:id . What happens if you past incorrect id? Then your code will try to find incorrect id in the DB and throw an error? And then you'd handle that error by redirecting to 404? Do I understand correctly? Coz I used to struggle with React Router while trying to implement routing only on the front end...
@andromilk2634
@andromilk2634 4 месяца назад
There was something which I was wondering when you create your request types : instead of using the name /blogs for a POST request, so the same as /blogs for a GET request, I assume that could you have picked any other term for this POST request instead and it would have worked without any problem?
@johnpzaccari
@johnpzaccari 3 года назад
You are the freaking man!!!!!
@ArielAmorim29
@ArielAmorim29 2 года назад
Thank you for this
@muhammadjunaid2329
@muhammadjunaid2329 3 года назад
But it adds event listener on the very first [a.delete]. How I can fix it?
@_prodbyfredericxk
@_prodbyfredericxk 11 месяцев назад
Nice tutorial for real !
@Chickengbs
@Chickengbs 4 года назад
What I don't quite get is, when you deleted the post/thread, why did you send back to the client the place where they should be redirected and then, they get redirected clientside. Why not just redirect them serverside? Would the reason of redirecting them on the client realm have to do with the fact, no serverside validation is required? Thanks :)
@cyrusharoon85
@cyrusharoon85 4 года назад
Sir, please make Node bootcamp with ecommerce and React with Redux ecommerce on udemy paid courses. You are an awesome instructor.
@bbbiii2341
@bbbiii2341 Год назад
Nailed it. U r legitimate Ninja
@sagarmajumdar92
@sagarmajumdar92 3 года назад
Great Course
@husamsibai5799
@husamsibai5799 2 года назад
Thankyou very much
@kraldragon1324
@kraldragon1324 2 года назад
respect man i appreciate it
@hassanelwany560
@hassanelwany560 2 года назад
Hi, I am trying to get attribute values, when i tested it with console.log(req.body) it return title value, snippet value, but it didn't back with body value may I ask for help?
@shadmanmartinpiyal4057
@shadmanmartinpiyal4057 3 года назад
Please do a full MERN Stack course.
@jackfrost8969
@jackfrost8969 4 года назад
If only you also had added the update part, that would have been so perfect. I wonder why you left it out though.
@erniea5843
@erniea5843 3 года назад
so you can try to see if you can figure it out baed on the examples :). Not that hard with the GET & DELETE route examples. just use PUT the the applicable mongoose method. Best way to learn!
@shilpadolai4228
@shilpadolai4228 3 месяца назад
@23:31 can we not use href directly with the delete button providing the id in the url just like we did for the details page. that way we dont have to write evrything we wrote in the script tag??
@majilumee
@majilumee 5 месяцев назад
Hi :) What is your VSC color theme ? Good videos❤
@fatmaelhosary6875
@fatmaelhosary6875 3 года назад
i get an error when i want to open create route after i have deleted all blogs ? at C:\Users\Fatma\Desktop odeJS ode_modules\express\lib outer\index.js:284:7 { messageFormat: undefined, stringValue: '"create"', kind: 'ObjectId', value: 'create', path: '_id', reason: Error: Argument passed in must be a single String of 12 bytes or a string of 24 hex characters
@alisonmaciel314
@alisonmaciel314 3 года назад
I've been stuck for almost a day on post request, didn't know what I was doing wrong and nothing seems to help with my problem. Came here and in less than 10 minutes you already saved me with the "express.urlencoded" tip, ty!
@MultiTrickster121
@MultiTrickster121 3 года назад
First of all amazing tutorials. Second, for deleting individual blogs would it not be possible to handle delete requests in the server? What was the reason for handling it on the browser? Also, how comes you used an 'a' tag for the delete button instead of a 'button' tag?
@programwithviggo2197
@programwithviggo2197 2 года назад
I think when you use the delete request then you'll have to handle this on the browser but there is another way to delete an item. You use a post request, grab the blog schema and use the findByIdAndRemove() function e.g app.post('blogs/delete/:id', (req, res) => { const blog_id = req.params.id; Blog.findByIdAndRemove(blog_id) .then((result) => { res.rendirect(`somewhere else`); } ) ; .catch((err) => console.log(err)); });
@dcoolmkia
@dcoolmkia 3 года назад
how do you the href=/blogs id in handlebars?
@evilservo
@evilservo 4 года назад
IS there not an express.js delete method like get and post?
@PriyanshuRaj-oc4tk
@PriyanshuRaj-oc4tk 3 года назад
AWESOME!!
@artsemm
@artsemm 3 года назад
I couldn't reach POST (posting a new blog) using the code in the tutorial, putting app.post before app.get helped
@bijayaadhikari442
@bijayaadhikari442 4 года назад
Checking out with perks
@nirodhalakmali8835
@nirodhalakmali8835 3 года назад
This is interesting and valuable tutorials. I am creating project and I want to how to use put request to update data.Can you give code for it.Thank you
@wudehaileyesus3017
@wudehaileyesus3017 3 года назад
The best ever!
@talhayerlikaya5199
@talhayerlikaya5199 3 года назад
when you download course to github ? İ have an issue and cant fix it
Далее
HTTP Request Methods | GET, POST, PUT, DELETE
3:01
Просмотров 84 тыс.
Node.js Crash Course Tutorial #9 - MongoDB
35:56
Просмотров 430 тыс.
Redis Crash Course
27:31
Просмотров 606 тыс.
Node.js Crash Course Tutorial #7 - View Engines
35:59
Просмотров 293 тыс.
Node.js Crash Course Tutorial #8 - Middleware
15:58
Просмотров 211 тыс.
Vue JS Crash Course
1:50:52
Просмотров 1,3 млн
Learn GraphQL In 40 Minutes
39:43
Просмотров 733 тыс.
Vanilla Node.js REST API | No Framework
1:01:37
Просмотров 161 тыс.