Here's how to make a spy return a value in Sinon.js
All Tutorials
Here's how you can check if a file exists using the fs module in Node.js
Here's how you can set HTTP response headers in Express.js
The `setTimeout()` function in JavaScript sets a function to run later in a non-blocking way. Here's what you need to know.
The `trim` option in Mongoose schema definitions makes Mongoose automatically call `String.prototype.trim()` on string fields. Here's how it works.
Here's how you can set whether a checkbox is checked in Vue
Here's how JavaScript arrays' `flatMap()` method works, and what you can use it for..
Here's how you can use ES6 Sets to get distinct values in an array.
Here's how Mocha's afterEach() hook works.
Got a JavaScript date that is showing up as "Invalid Date" in your console? Here's how you check for that.
Here's how you can use the btoa() function in JavaScript to convert strings to base64. Also describes how to convert strings to base64 using Node.js buffers.
Mocha doesn't have a built-in assertion library, but here are a few options.
Here's how `it.skip()` works in Mocha
Here's how you can use date-fns-tz to work with timezones, and alternatives for working with timezones in vanilla JS.
Here's how Mocha's before() hook works, and when you should use it.
Here's two ways you can run just one test out of a Mocha test suite.
Here's how Mocha's beforeEach() hook works.
Here's how you can check if the current URL contains a given string in JavaScript.
The "__dirname is not defined" error is usually due to using ESM. Here's how you can fix this error.
Here's how you can add a month to a JavaScript Date without using external libraries. We also have examples using date-fns or Luxon.
Here's how you can add days to a Date without using external libraries, or using date-fns or Luxon.
Here's 3 different ways to merge arrays in JavaScript, including trade-offs between them.
You can convert BigInts to numbers using the `Number()` constructor, with a few caveats. Here's what you need to know.
Sinon's callsFake() function lets you configure what a stub function returns. Here's what you need to know.
Axios' maxBodyLength property provides a neat way to add a maximum size for HTTP request bodies. Here's what you need to know.
Here's what you need to know about JavaScript's `parseInt()` function.
Here's what you need to know about Node's built-in uuid functionality.
Here's a tool to convert short JavaScript snippets from callbacks to async/await using ChatGPT 3.5.
Here's a playground to test out Lodash in your browser.
The `toFixed()` function converts a number to a string rounded to a certain number of decimal places. Here's what you need to know.
Here's how the nullish coalescing operator in JavaScript works
Here's how you can find what bar in a bar chart the user clicked on in ChartJS 4 and ChartJS 2+3
JavaScript doesn't have a built-in tuple type, but here's how you can implement one.
Here's how you can convert a TypeScript or JavaScript enum to a string, or enum value to a string.
Here's how to use JavaScript's optional chaining with array indexes.
Here's how to use Lodash's `omit()` function to exclude properties from an object. Also includes a vanilla JS alternative for `omit()`.
Here's 3 ways you can add two arrays together in vanilla JavaScript, no libraries required.
JavaScript's String `match()` function lets you test whether a string matches a given regexp. It also has some neat tricks for advanced users using regexp groups.
Here's how you can import Chart.js from JSDelivr, Cloudflare, or unpkg in your HTML files.
Here's how you can convert a JavaScript Set to an array with no external dependencies.
Here's what setting the length of a JavaScript array does.
ChartJS bar charts are vertical by default. Here's how you make a horizontal bar chart.
Here's 2 ways to get the last element in an array in JavaScript with no external dependencies.
Here's how you use Lodash's cloneDeep function.
Here's what you need to know about methods in Vue
Here's what you need to know about using the ternary operator in Vue templates.
You can't skip an index using JavaScript's map() function, but there are a couple of workarounds. Here's 2 alternatives.
Here's how you can conditionally add an object to an array, using push, concat, or the spread operator.
Here's how you can validate an email input in Vue.
Here's a regular expression you can use to validate emails in JavaScript.
Here's how you can copy text to the clipboard programatically with Vue.
Here's how you can copy text to the clipboard programatically in JavaScript.
Here's how you work can create computed properties using Vue 3's new composition API.
Here's 3 ways you can toggle an element's visibility in Vue templates.
You can't access global variables from Vue templates by default, but here is how you can add variables that are global to all Vue templates.
Here's how you can use bcrypt-js to work with passwords in Node.js.
Here's what you need to know about Vue components' `inheritAttrs` option.
Here's how you pass custom props to your view components with Vue Router, including route parameters.
Here's what you need to know about Node's built-in assert module.
Here's how you can use Webpack to write your Vue templates as HTML files in the browser, as well as how to use HTML templates for server-side rendering in Node.js.
Here's how you can control an image's `src` property in Vue using `v-bind:src`.
Here's how you can quickly calculate the median of an array of numbers in vanilla JavaScript, with no outside libraries.
Here's an online tool for formatting CSS code in the browser, as well as how to implement CSS formatting in JavaScript yourself.
Here's how you can configure ChartJS' line chart fill color, including removing the fill color.
Here's how to use `encodeURIComponent()` to sanitize query string parameters in JavaScript.
Here's how you can implement soft delete with Mongoose.
Here's how you can use limit() to return a fixed number of documents with Mongoose `find()`.
Here's how you capitalize the first letter of a string using Lodash.
Here's how you can check if a date is between two dates in vanilla JavaScript, no libraries.
Here's what you need to know about v-else-if in Vue.
Here's what you need to know about using `v-else` with `v-if` in Vue.
Here's what the "Buffering timed out after 10000ms" error means in Mongoose, and how to fix it.
Mongoose models don't have an `insertOne()` function, but `create()` is similar. Here's what you need to know.
Here's how you can check if a string contains numbers in vanilla JavaScript.
Here's how you can remove null elements from an array with Lodash.
Here's how you can find an object in an array by a nested property using Lodash.
Here's how you rename variables using destructuring assignment in JavaScript.
Here's how you can use the string `split()` method to split on one of multiple characters in JavaScript.
Here's how you can use the `truncate()` function in Lodash to trim strings
Here's how you can remove `null` properties from a JavaScript object using Lodash.
Here's how to modify authorized redirect URIs for logging in with Google OAuth.
Here's two ways that Mongoose lets you execute code when a document is deleted: using middleware, and using change streams.
Here's how you can use enum validators in Mongoose.
Here's how you can fix the `v-bind:key` warning in Vue.
Here's the basics of how to work with the `img` tag in Vue.
Empty objects are truthy in JavaScript, so you need a little extra work to check if an object is empty. Here's how.
Here's two ways to merge two objects in vanilla JavaScript.
Here's how you can restrict Mongoose's `find()` function to only return certain fields using `select()`.
Running into "Query was already executed" errors in Mongoose? Here's what causes this error, and how to fix it.
Here's what you need to know about the `firstChild` property in JavaScript.
The `createElement()` function lets you manually create DOM elements. Here's what you need to know.
Here's how you can use the `difference()` function in Lodash to compute the values that are in one array but not another.
Here's how you can use _.uniq() to filter out duplicate entries in a JavaScript array.
Here's how you can create a chart that has two different Y axes with different scales in ChartJS.
Here's a tool that displays times between retries given different Temporal retry policies.
Here's how you can hide the default tooltip that shows when you mouse over a ChartJS chart.
Here's how you can configure the X and Y axis label colors in ChartJS.
Setting the chart size with ChartJS is tricky. Here's what you need to know.
Here's how you can use replaceAll() to replace all instances of a substring in JavaScript.
Here's two ways to get the i-th character from a string in JavaScript, and which one you should use.
Here's 3 ways you can add an element to the front of an array in JavaScript.
Here's how the array method `pop()` works in JavaScript.
Here's how the array method `unshift()` works in JavaScript.
Here's how the array method `shift()` works in JavaScript.
Here's how you can implement the Fisher-Yates Shuffle Algorithm in JavaScript.
Here's what you need to know about the `nextTick()` function in Vue, and why it is different from `setTimeout()`.
Convert JSON to YAML using this friendly in-browser converter.
Convert binary numbers to decimal numbers with this handy tool.
Here's how you can delay operation executions in NodeJS.
Here's how mocks work in Sinon.js
Here's how spies work in Sinon.js
Here's how you can use Sinon to stub a function.
Download or link to the Vue.js logo in different styles and formats: svg, png, jpg.
Here's 3 ways to empty out an array in JavaScript, clearing out all the elements.
Here's how you can check if a value is an integer in JavaScript.
Here's how you can handle HTTP FormData with Express
Here's two ways to check whether a SinonJS stub was called with given arguments.
Here's how you can use `sinon.stub()` to stub out functions and assert that they were called.
Here's how you can check whether a string does *not* start with a given regular expression in JavaScript.
Here's how you can use the RegExp `test()` function to test whether a string starts with a regular expression.
Confused by `app.use(express.json())` in Express? Here's what you need to know.
Looking to format a JavaScript date to YYYY-MM-DD? Here's two easy ways using vanilla JavaScript.
Looking to convert an array to a string in JavaScript? Here's two ways.
Here's how you can parse a URL into components in vanilla JavaScript.
Here's how you can reverse an array in JavaScript, both in-place and without mutating the original array.
Checking if a property is undefined in JavaScript is easy, but has some nuances. Here's what you need to know 👉
Mongoose doesn't have a `deleteById()` function, but here's how you can delete an object by its _id 👉
Here's how you can compare 2 arrays of numbers in vanilla JavaScript.
Need to remove the last character from a string in JavaScript? Here's 3 ways 👉
Mongoose models have an `deleteMany()` function that allows deleting all documents that match a filter. Here's what you need to know.
Mongoose models have an `updateMany()` function that allows updating all documents that match a filter. Here's what you need to know.
All about Webpack's `definePlugin()` function: how it works, and when to use it.
Here's what you need to know about router-view in Vue Router.
JavaScript's `Promise.allSettled()` function is like `Promise.all()`, but with a few key differences. Here's what you need to know.
Need to sort an array of JavaScript dates, or an array of JavaScript objects by a date property? Here's how 👉
By default, Mongoose's `findOneAndUpdate()` function returns the document as it was before the update was applied. Here's how you can change that 👉
Here's what you need to know about `findOneAndUpdate()` in Mongoose.
Need to run a query in Mongoose using query string parameters? Here's what you need to know 👉
Need to trim leading or trailing characters from a string in JavaScript? Here's how 👉
Here's how you can compare whether two JavaScript dates are on the same day, ignoring time.
JavaScript doesn't support enum as a built-in type, but here's how you can use `map()` with userland enum objects.
Need to reverse a string in JavaScript? Here's 3 different ways to reverse strings.
Here's how you can convert a string to uppercase in JavaScript.
Convert HTML to Pug in your browser, with syntax highlighting!
Here's what you need to know about click events on buttons in Vue.
Here's how you can handle the `resize` event in Vue.
Here's what you need to know about `Object.values()` in JavaScript.
It is easy to make your function wait for 1 second in JavaScript using promises and/or `await`. Here's how.
Here's the difference between JavaScript's `substring()` and `slice()` functions, and why you would use one or the other.
Here's 2 ways you can create a new object using a subset of the original object's keys.
Here's how you can filter an object by key and value in JavaScript.
Convert Pug to HTML in your browser, with syntax highlighting!
Here's how you can write a custom scroll directive in Vue.
Here's how you can set headers on an HTTP POST request with Axios.
The `push()` function is how you do programmatic navigation with vue-router. Here's what you need to know.
void is an operator, not a function. But you can still use void with function-like syntax. Here's how.
The `return` keyword behaves differently with `forEach()` than with conventional loops. Here's what you need to know.
Here's how you can iterate through an array or object using `forEach()` and get both the key and the value.
Here's how you can concatenate two regular expressions in JavaScript
Here's how you can send an HTTP DELETE request with a request body in Axios.
Here's how you can concatenate a number to a string in JavaScript.
Here's how you can use `trimStart()` to remove leading whitespace from a JavaScript string, or `replace()` to remove any other leading characters.
Installing Node.js on Ubuntu with apt-get can be tricky if you want to install a specific version. Here's a better way.
Deep copying an array in JavaScript is tricky. Here's what you need to know.
Here's how you can remove leading zeros from a string in JavaScript
Here's how you can add an element to the beginning, middle, and end of an array, as well as how you can check for duplicates.
Here's how you can make an HTTP PUT request from Vue using Axios.
You should not use async functions with `forEach()` in JavaScript. Here's why, and what you should use instead.
Here's how you can concatenate an array of strings in JavaScript, including filtering out non-string values.
JavaScript maps have a `forEach()` function, as well as several helpers that let you iterate over a map's keys and values using `forEach()`. Here's what you need to know.
Here's how you can drag and drop file uploads with Vue.
Here's how you can use Vue to upload files to Firebase.
JavaScript object properties have an `enumerable` property that controls whether that property shows up in `Object.keys()` and `for/in`. Here's what you need to know.
Here's how you can determine if a variable is a date in JavaScript
Here's how you can check if a variable is undefined in JavaScript.
Here's how you can determine whether a given value is null in JavaScript.
Here's how you can check if a given JavaScript variable is an object.
The `typeof` operator is not a good choice for checking if a variable is an array. Here's why.
JavaScript's typeof operator can be used with a function-like syntax. But it is technically not a function. Here's what you need to know.
JavaScript's typeof operator can be used with a function-like syntax. But it is technically not a function. Here's what you need to know.
JavaScript's typeof operator lets you check if a value is a number. Just be careful about `Number()` instances, BigInts, and NaN!
Here's what you need to know about primitive types in JavaScript.
Here's two ways to convert an array to a string in JavaScript: using `toString()`, and using `join()`.
Here's how you can use Axios to make GET requests for JSON data, as well as PUT and POST JSON data to a server.
Here's how you can set the User-Agent header when making an HTTP request with Axios.
JavaScript does not support named parameters, but you can get the same syntactic benefits using object destructuring. Here's how.
Here's what you can do with the spread operator `...` in JavaScript.
Here's how you can display the contents of an `input type="file"` using Vue.
Here's how you can use `style scoped` in Vue to define CSS rules that apply to only one component.
`url-loader` lets you `import` arbitrary files, like images. Here's what you need to know.
Here's how you can use Webpack aliases to make your `import` statements more readable.
Here's how you can convert a string to an array in JavaScript: either splitting by a separator or converting a string to an array of characters.
Need to run a function when the user changes the value of a `select` tag in Vue? Here's what you need to know.
There are several ways to compare objects in JavaScript. Here's 3 different ways to compare objects in JavaScript and the tradeoffs between them.
Here's how you can use Vue's `provide` and `inject` to avoid prop drilling.
Here's how you can upload files using Vue and Axios.
Here's how you can use Vue with Bootstrap dropdowns, no outside modules required.
Here are some basic patterns for using Vue with the HTML `table` tag.
Here's how you can use Vue with the `select` tag, including how to use two way data binding with `v-model`.
Looking to send a POST request with FormData with Axios for a file upload? Here's what you need to know.
Here's how you can use Axios' `create()` function to make an Axios instance that sends POST requests by default.
There are a few nuances with checking whether a variable or object property is undefined in JavaScript. Here's what you need to know.
There are two ways to declare a mutable variable in JavaScript: let and var. Here's how they're different, and why you should use let.
Here's how you can handle POST requests in Express, including handling JSON request bodies and file uploads.
Here's an example of how you can make a barchart in a Vue component with D3.js.
Vue makes it easy to work with websockets. Here's an example of how you can use websockets in your Vue components.
String interpolation means replacing placeholders in a string with computed values. Here's how you can do string interpolation in JavaScript using template literals.
Looking to learn Vue in 2023? Or looking to level up your Vue skills? Here's a list of books that can help!
Here's how you can use Chart.js and vue-chartjs to render charts in Vue.
Vue single file components (.vue files) provide several advantages over writing vanilla JavaScript. Here's how you can get started with Vue single file components, including how to configure Webpack.
Here's how you can validate emails, and ensure emails are unique, using Mongoose.
Axios responses have a `data` property that contains the HTTP response body. Here's what you need to know.
Any JavaScript variable defined outside any function is a global variable, but that comes with caveats for Node.js and Webpack. Here's what you need to know.
In addition to `axios.get()` and `axios.post()`, Axios itself is a function that you can call. Here's what you need to know.
Mongoose's `find()` function works with async/await. Here's how you can use async/await with Mongoose queries.
Mongoose connections have a `db` property that lets you bypass Mongoose and talk to MongoDB directly. Here's what you need to know.
Here's how you can use `axios.all()` to make multiple HTTP requests in parallel.
Checking for `NaN` is tricky because `NaN === NaN` returns false in JavaScript. Here's how you can check whether a value is equal `NaN`.
Sending an HTTP PATCH request with Axios is easy. Here's what you need to know.
Axios is an isomorphic HTTP client, which means it works the same way on both client and server. Here's how you can use Axios with Node.js.
JavaScript doesn't have an official enum type, but there are several design patterns that let you define enums using vanilla JavaScript. Here's what you need to know.
How to use connect() and createConnection() in an async function.
Mongoose connections have a `readyState` property that lets you check if Mongoose is connected to MongoDB. Here's what you need to know.
JavaScript strings have a neat `trim()` method that removes leading and trailing whitespace. Here's what you need to know.
JavaScript arrays have a neat `filter()` function. Here's how you can use the `filter()` pattern with objects.
JavaScript's `forEach()` function is one of several ways to iterate through an array in JavaScript. Here's what you need to know about `forEach()`.
Here's what you need to know about Vue 3's brand new reactivity system, based on ES6 proxies.
Vue 3 was released on September 18, 2020. Here's what you need to know about defining components in Vue 3 vs Vue 2.
Vue 3 was released on September 18, 2020. Here's how you can get started building a basic app with Vue 3 and no other dependencies.
Here's how you can compare two dates in JavaScript, ignoring the time component.
In JavaScript, `null` is a primitive that represents the intentional absence of a value. Here's what you need to know.
The `toString()` method converts values into strings. Here's what you need to know.
There are several ways to shallow clone an object in vanilla JavaScript, and a couple of ways to deep clone an object. Here's what you need to know.
Axios supports cancelling HTTP requests using cancel tokens. Here's what you need to know.
Calling `app.use(express.static())` adds a middleware to your Express app that serves static files. Here's what you need to know.
Express apps have a `get()` function that creates a new route handler for GET requests. Here's what you need to know.
Express apps have a `use()` function that adds a new middleware to the middleware stack. Here's what you need to know.
Vuex actions are a neat way to handle async logic with Vuex. Here's what you need to know.
Vuex stores are containers for your app's state. Here's what you need to know.
Getters are how you bind store data to local data in your Vue components. Here's what you need to know.
Lodash's `isEqual()` function provides a deep equality check for comparing objects. Here's what you need to know.
`NaN`, "Not a Number", is a value that JavaScript returns when you attempt to use a non-numeric value as a number. Here's what you need to know.
There are 4 different algorithms JavaScript uses to determine whether two values are equal. Here's what you need to know.
Here's how you can create a simple HTTP proxy in Node.js.
Should you use Axios or browsers' native `fetch()`? Here's why you should use Axios.
Axios has a `proxy` option that lets you send requests through a proxy. Here's how it works.
The `push()` function is the most common way to add a new element to a JavaScript array, but there are a few other alternatives. Here's what you need to know.
The `includes()` array method tells you whether an array contains the given element. Here's what you need to know.
Here's how you can get the current index (counter) the `forEach()` loop is on.
The `continue` keyword doesn't work with `forEach()`, but there are ways to skip to the next iteration of a `forEach()`. Here's how.
The `break` keyword doesn't work with `forEach()`, but there are several ways to simulate `break` with `forEach()`. Here's how.
Checking what version of Node.js you're using is easy. You can either run `node --version`, or print `process.version`. Here's what you need to know.
Node.js has a built-in HTTP server class that you can use to respond to HTTP requests. Here's what you need to know.
The ws package lets you start a websocket server in Node.js. You can also integrate ws with frameworks like Express. Here's how.
`npm list` lets you get the currently installed version of a given package. Here's what you need to know.
`npm update` lets you update a package that you previously installed. Here's what you need to know.
`npm uninstall` lets you uninstall a package that you previously installed, including all of the package's dependencies. Here's what you need to know.
Vue has great support for SVG graphics, letting you draw customized images and charts. Here's what you need to know.
Vue instances have a neat `errorCaptured` function that Vue calls whenever an error occurs in a method or lifecycle hook. Here's what you need to know.
Vue Test Utils is Vue's official unit testing library for Node.js. Here's how you can get started testing Vue components in Node with Vue Test Utils.
Here's how you can send an HTTP DELETE request with Axios, including how to send a request body with a DELETE request.
Axios' `options` parameter contains numerous options for configuring HTTP requests. Here's what you need to know.
Axios' `data` parameter ends up in the HTTP request body, so you can't send GET requests with `data`. Here's a workaround.
Here's how you can compare two strings in JavaScript, ignoring case.
Uploading a file to a server is a common task in JavaScript. Here's how you can upload a file and handle the upload on the server side using Node.js
There are a couple of ways to validate email addresses in JavaScript: using regular expressions, synchronous libraries, or APIs. Here's what you need to know.
Express template engines let you plug in support for templating languages like Pug (AKA Jade), Handlebars, or anything else. Here's how you can use existing templating engines, or write your own.
Given some plain HTML, how do you render it using Express? Here's what you need to know.
Express requests have a `params` object that contains route parameters, as well as a `query` object that contains query parameters. Here's what you need to know.
Node.js buffers have a `toString()` method you can use to convert raw data into various encodings, like hex and base64. Here's what you need to know.
Node.js buffers have a length property that contains the number of bytes in the buffer. Here's what you need to know.
Node.js buffers have a static function `compare()` that lets you check if two buffers are equal. Here's what you need to know.
When used together, JavaScript's `map()` and `filter()` functions let you write more composable code. Here's what you need to know.
JavaScript arrays have a `filter()` method that quickly lets you get just the elements of an array that match a given condition. Here's 5 common patterns with the `filter()` function.
JavaScript arrays have a `filter()` method that quickly lets you get just the elements of an array that match a given condition. Here's how you can use it to filter an array of objects.
Running `eslint --fix` tells ESLint to automatically fix common errors. Here's what you need to know.
ESLint config files let you define what rules ESLint enforces and what environment your project is targetting. Here's what you need to know.
Rules are how you configure ESLint. By configuring which rules are errors or warnings, you can build your own ESLint config. Here's what you need to know.
Here's how you can convert a JavaScript array into an object.
Here's several ways you can copy an array in JavaScript.
"TypeError: X is not a function" errors can be confusing. Here's what this error message means and how you can fix it.
Axios can automatically serialize query strings for you. Here's what you need to know.
When you `await` on an Axios request, you get back an Axios response object. Here's how you can get the HTTP response body from an Axios response object.
Axios makes it easy to send HTTP GET requests, including serializing query string parameters. Here's what you need to know.
Mongoose has a built-in timestamps option that sets `createdAt` and `updatedAt` on your documents automatically. Here's how you can use it.
Mongoose's `create()` function is a convenience wrapper around `save()`. Here's what you need to know.
Mongoose lets you define schema paths as `unique`, but the `unique` option has a few important caveats. Here's what you need to know.
You don't have to use bundlers to compile Vue, you can easily load Vue from a CDN. Here's what you need to know.
Vue's v-on:click lets you attach click handlers to DOM elements. Here's what you need to know.
Watchers and computed properties are two ways to update one value when another value changes. Here's how they are different.
There are numerous ways to iterate through an array in JavaScript. Here's what you need to know.
The `filter()` method creates a new array of elements that match a given test. Here's what you need to know.
Iterators and iterables define sequences of values in JavaScript. Here's what you need to know.
Now that Node.js has native support for ESM imports, should you use `require()` or `import`? Here's what you need to know.
Node has limited support for ES6 import statements. Here's how you can make JavaScript that uses `import` work in Node.
Node's built-in HTTP library lets you make HTTP requests, but is hard to work with. Here's what you need to know.
Symbols are a way to create hidden properties on JavaScript objects. Here's what you need to know.
Here's how you can parse the query string parameters in vanilla JavaScript.
Here's how you can capitalize the first letter of a JavaScript string without any external libraries.
Axios automatically serializes JavaScript objects into JSON, but you can also send a manually serialized JSON string. Here's what you need to know.
Axios requests are JavaScript promises, so you can use the `.catch()` function to handle errors. Here's what you need to know.
Axios interceptors let you transform requests and responses. You can think of interceptors as Axios' equivalent to middleware in Express or Mongoose. Here's what you need to know.
MongoDB does not have a LIKE operator akin to SQL, but MongoDB does support queries by regular expressions. Here's how you can use regexp queries to simulate SQL's LIKE operator in Mongoose.
Mongoose queries have an `explain()` helper that let you inspect what indexes a query used. Here's how you can use `explain()` to figure out how a query performed.
Mongoose's `save()` function persists the changes you made to a document to the database. Here's what you need to know.
You can use `forEach()` to iterate over a JavaScript object using `Object.key()`, `Object.values()`, and `Object.entries()`. Here's what you need to know.
Immediately invoked function expressions (IIFE) is a design pattern commonly used to encapsulate variables. Here's what you need to know.
Here's how you can disable a button using vanilla JavaScript.
Mongoose arrays supports arrays of primitives and arrays of subdocuments. Here's how you can work with Mongoose arrays effectively.
In Mongoose, a SchemaType is a configuration object for a given path within a schema. Here's what you need to know.
Aggregations in Mongoose let you perform complex transformations on your data in MongoDB. Here's what you need to know.
Here's how you can build a basic login form using Vue and Axios.
The `router-link` component is the preferred way to create links with Vue router. Here's what you need to know.
The `mounted()` hook is the most commonly used lifecycle hook in Vue. Here's what you can use `mounted()` for and why you should use it rather than the `created()` hook.
Here's how you can use Webpack and the css-loader package to import styles.
Webpack can bundle and compile TypeScript using ts-loader. Here's what you need to know.
Externals let you exclude certain imports from the bundle so they can be resolved at runtime (like loaded via a script tag). Here's what you need to know.
The `FormData` class is useful for uploading files from JavaScript. Here's what you need to know.
Blobs (binary large objects) are a file-like data structure in JavaScript. Like buffers, but for the client side. Here's what you need to know.
The FileReader class lets you read files from a native file input. Here's what you need to know.
Here's how you can redirect to a different URL using Vue Router, using the built-in `redirect` option or programatically.
Here's how you can use Vue's `component` component to render a different component based on the state of your app.
A modal is an in-app pop-up. Here's how you can build a basic modal component in Vue.
A thenable is an object that behaves like a promise for the purposes of chaining and async/await, but is not necessarily a promise. Here's what you need to know.
Rejecting a promise in JavaScript is how you mark a promise as errored. Here's what you need to know.
Promise chaining is a powerful pattern for composing promises. The key benefit is that you can handle all errors with one `catch()` handler. Here's what you need to know.
Bluebird is a popular alternative Promise library for JavaScript. Here's what you need to know.
Lodash has a `pick()` function that creates a new object from a subset of the given object's keys. Here's what you need to know.
Lodash has a `merge()` function behaves like `Object.assign()`, but with a couple key differences. Here's what you need to know.
Lodash has a `map()` function that transform arrays and objects value by value. Here's what you need to know.
Lodash has a `filter()` function that lets you filter an array using a custom function. Here's what you need to know.
Sending an HTTP PUT request with Axios is easy. Here's what you need to know.
Here's how you can set the authorization header on an Axios HTTP request.
Axios request objects have a `then()` function, which means you can use them with promise chains and async/await. Here's what you need to know.
There are several ways to create a new promise in JavaScript. Here's what you need to know.
The `catch()` function is a convenient bit of syntactic sugar that helps you handle promise errors. Here's what you need to know.
Everything you need to know about the `mongoose.Promise` property.
Comparing two arrays in JavaScript can be tricky. Here's what you need to know.
Comparing dates in JavaScript is tricky. Since dates are objects, `===` compares dates by reference rather than by value. Here's how you can compare dates in vanilla JavaScript.
JavaScript's comparison operators make it easy to compare strings. There's also a `localeCompare()` method for sorting.
The `sendFile()` method lets you send a static file as an Express response. Here's what you need to know.
Here's how you can serve static assets directly from a folder using Node.js and Express.
Handling websockets with an Express server in Node.js is easy with the ws module. Here's how it works.
Google Cloud has a Node.js API that lets you upload Google Cloud Functions, launch new VMs, and compile code on Google Cloud. Here's how you can upload files to Google Cloud Storage.
Webpack Bundle Analyzer generates a zoomable treemap of the contents of your Webpack bundle. Here's how you can get started with webpack-bundle-analyzer.
Webpack configs are a common source of confusion, but they are actually pretty simple to write by hand. Here's what you need to know.
The typeof Operator tells you the type of a value - whether the value is a number, string, object, etc. Here's what you need to know.
JavaScript's built in `sort()` function lets you sort arrays by an object property. Here's what you need to know.
There are numerous ways to iterate over all keys and values in a JavaScript object. Here's 3 ways and the tradeoffs between them.
Node.js has a built-in Buffer type that lets you store arbitrary binary data. Here's what you need to know.
AWS is powerful, but their UI leaves a lot to be desired. Here's how you can skip the AWS console and deploy Lambda functions from a Node.js script.
The `util.promisify()` function converts functions that use Node.js callbacks into functions that return promises. Here's what you need to know.
GraphQL operations are broken up into 2 types: queries and mutations. Queries are read-only, mutations modify data. Here's what you need to know about mutations in Apollo.
Apollo is a GraphQL server - it parses your GraphQL schema and provides a framework for you to define resolvers and mutations. Here's what you need to know.
The `v-for` directive lets you render a separate item for each element in an array. Here's what you need to know.
Unit testing is tricky, especially on the frontend. Here's a couple of patterns we use at Mastering JS for testing Vue components in isolation.
Vue instances have a `$refs` property that lets you access a Vue instance's child components. Here's what you need to know.
Puppeteer is a great tool for testing JavaScript apps in a real browser. Here's what you need to know.
State machines may seem like a dull abstract topic, but they are extremely useful for JavaScript developers. Here's what you need to know.
Async/await lets you write async code in a way that looks sync. No callbacks or promise chains, just `for` loops and `if` statements. Here's what you need to know.
When you call `new Promise` in JavaScript, you invoke the Promise constructor. Here's how you can use the Promise constructor like a pro.
Resolving a promise in JavaScript is how you mark a promise as fulfilled. Here's what you need to know.
The `Promise.all()` function lets you execute multiple promises in parallel, and accumulates the results. Here's what you need to know.
A webhook is an API endpoint designed to be called by an outside service when an event occurs. Here's what you need to know about webhooks in Express.
Server-sent events are an alternative to websockets for pushing events from your Express server to your client. Here's how you can get started with server-sent events in Node.js with Express.
The switch statement is like a multi-tiered `if` statement that can execute different code for different cases. This tutorial shows you how to use the `switch` and `case` statements.
The `vue.config.js` file configures the Vue CLI. Here's what you need to know.
Vue components have lifecycle hooks just like React components. Vue calls these functions whenever it does certain things to your component.
Learn how to set classes on an element conditionally in Vue.js.
The `this` keyword, also known as a function's "context" or "scope", is a powerful but confusing concept. Here's how you can wrap your head around it.
Whether you should use `==` or `===` is a common cause of confusion in JavaScript. The TLDR is that you should use `===`, with one minor exception. Here's what you need to know.
You can get tomorrow's date using vanilla JavaScript, although it is often easier with a library like Moment.js. Here's what you need to know.
The `static` keyword lets you define properties and functions on ES6 classes. Here's what you need to know.
The modulus operator in JavaScript returns the remainder when the first operand is divided by the second operand. Here's what you need to know.
Vue's `v-model` directive is useful for collecting user data. Here's how you can use `v-model` to build a form.
You can use React-style JSX with Vue using render functions. Here's what you need to know.
ESLint helps you avoid common code mistakes, but sometimes you need to make an exception for one line. Here's how you can disable an ESLint rule for one line.
ESLint helps you avoid common code mistakes, but sometimes you need to make an exception to an ESLint rule. Here's what you need to know.
Mongoose populate lets you store references to other collections and load referenced documents with one line. Here's what you need to know.
Here's how you can upload files from JavaScript using Axios and JavaScript's built-in FormData class.
JavaScript lets you put any type of value in an `if` statement, not just a boolean. JavaScript's native type coercion then takes over - a "truthy" value is a value that JavaScript's native type coercion converts to true.
JavaScript has 3 logical operators: `&&`, `||`, and `!`. These 3 operators are usually used to structure `if` statements, but they also have some unique quirks that you can take advantage of. Here's what you need to know.
JavaScript type coercion is full of surprises, but if you understand the basics it can save you a lot of wasteful type checks. Here is what you need to know about falsy values.
Express automatically parses the URL query string and stores the parsed parameters in `req.query`. Here's what you need to know.
Express route parameters allow your users to pass parameters in the URL. Here's what you need to know.
Express doesn't set the request body for you by default, you need to attach middleware. Here's how you set up Express to parse the request body for you.
Express' Router class lets you define request handlers for specific URIs and HTTP methods. Here's what you need to know.
The `filter()` function in JavaScript lets you filter out array elements that don't match certain criteria. Here's what you need to know.
JavaScript doesn't have a built-in `sleep()` function, but that doesn't mean you can't pause a function in JavaScript.
The Vue cookbook recommends using Axios for HTTP requests with Vue. Here's an alternative tutorial on how to use Axios with Vue.
Cross-Origin Resource Sharing, or CORS for short, is a protocol for a browser to determine whether it is safe to make a request to a different domain. Here's what you need to know.
Plain old JavaScript objects are the most common way to store user-entered data in JavaScript. But how do you actually define a POJO?
Lodash's `clone()` function shallow clones a given object. Here's how it differs from using `Object.assign()`.
Axios' `create()` function lets you create a "template" HTTP request, with defaults for future requests.
Sending an HTTP POST request with Axios is easy. Here's what you need to know.
Express responses have a `res.json()` function that serializes a JavaScript object to JSON and puts it in the response body. Here's what you need to know.
CORS (Cross-Origin Resource Sharing) headers allow browsers to make HTTP requests to different domains. Here's how you set CORS headers with Express and Node.js
The `then()` function is the primary way you interact with promises in JavaScript, including promise chaining.
A promise is an object that represents an asynchronous operation. Promises are JavaScript's fundamental concurrency primitive - here's what you need to know.
In MongoDB, every document's `_id` property is an ObjectId by default. Here's what you need to know about ObjectIds in Mongoose.
Middleware is the fundamental building block of Express apps - even routes are middleware under the hood. Here's what you need to know about middleware.
The `instanceof` operator tells you whether a given object is an instance of a class.
As of ES6 / 2015, JavaScript has a built-in `class` keyword for object-oriented programming. Here's how it works.
The `JSON.stringify()` function is the canonical way to convert a JavaScript object to a JSON string. This tutorial explains `JSON.stringify()` from a practical perspective with examples.
The `seal()` function prevents adding or removing properties from an object, while still letting you modify existing properties. Here's what you need to know.
Lodash's `debounce()` function lets you ensure a function is only executed once every X seconds.
Lodash's `find()` function lets you find the first element in an array that matches a given criteria. Here's how it works.
In Vue, `v-bind` provides one-way data binding and lets you pass props down the component tree. Here's how it works.
In Vue, the $emit function lets you pass events up the component tree. Here's how it works.
JavaScript uses prototype-based inheritance, even when you use the ES6 class `extends` keyword. Here's what you need to know about prototypes.
In JavaScript, you often hear the terms "deep clone" and "shallow clone", also known as deep/shallow copy. This tutorial describes what these terms mean with examples.
In Mongoose, schemas are a configuration object for models. They tell Mongoose what paths to cast/validate, what options to set, and what virtuals to create.
The `mongoose.connect()` function is the most common way to connect to MongoDB with Mongoose. This tutorial describes how to use `mongoose.connect()` and how to troubleshoot common issues.
The `Object.assign()` function lets you assign properties from one object to another. You can use it to shallow copy objects or assign multiple properties at once.
You can concatenate strings in JavaScript using the `+` operator, the `Array#join()` function, or the `String#concat()` function. Here's what you need to know.
Lodash has a `get()` function that helps with safe navigation (AKA the Elvis Operator, null coalescing). In other words, get() helps you avoid "Cannot read property 'prop' of undefined" errors. Here's what you need to know.
Lodash has a `sortBy()` function that provides some neat syntactic sugar on top of `Array#sort()`. This tutorial will teach you what you need to know about `_.sortBy()`.
How to convert the string "dog" to "Dog" in JavaScript.
The void operator in JavaScript is a common source of confusion because it is rarely taught, but has a couple of convenient uses. This tutorial explains the most common use cases for the void operator.
Many frameworks, like Vue, allow you to embed JavaScript expressions in HTML. But what is an expression? Can you put `if` statements in an expression?
Error handling middleware is the canonical way to handle errors in Express. This tutorial shows you how to use error handling middleware for several common use cases.
The `res` parameter in Express is used to craft an HTTP response. This tutorial teaches you how to use the `res` object by example.
An overview of the `req` parameter in Express.
Are your Vue templates hard to read because you have extremely long template expressions in `{{}}`? This tutorial will show you how to fix this problem using computed properties.
A tutorial about how to use the `findById()` function in Mongoose.
The Mongoose `Model.find()` function finds all documents in a collection that match a query. In this tutorial, you will learn how to structure common queries in Mongoose.
The push() method adds an element to the end of a JavaScript array. This tutorial will show you how push() works.
There are two common ways to check if a JavaScript array contains a value: `includes()` and `indexOf()`. This tutorial shows you how to use both, and why you would use one versus the other.
Learn how to propagate events from a child component to a parent component using v-on.
Learn how to use the v-if directive for conditional rendering in Vue.
Two way data binding lets you build sophisticated forms without outside libraries. In this tutorial, you will learn about Vue's mechanism for two-way data binding: the v-model property.
Arrow functions let you write functions more concisely, but come with several syntactic quirks. This tutorial describes what you need to know to use arrow functions effectively.
The `const` keyword in JavaScript does not prevent you from changing an object's properties. The Object.freeze() function does that, but comes with caveats.
"use strict" enables strict mode in JavaScript. This tutorial explains what strict mode does for you.
The term "callback" can mean one of a few different concepts in JavaScript. This tutorial will help you wrap your mind around callbacks.
An introduction to how to use Object.keys() in JavaScript
An overview of the Mongoose Query class and how to use it to query for documents
A tutorial about how to get all documents in a Mongoose model
A tutorial on how to use `splice()` to add and remove elements from JavaScript arrays
There are 3 ways to get a substring of a string in JavaScript. In this tutorial, you will learn the difference between `String#substring()`, `String#substr()`, and `String#slice()`
Learn how to use Vue watchers to execute code when a value changes.
Learn how to use Vue watchers to execute code when a value changes.
Learn how to use webpack-dev-server to run your browser-side JavaScript
An introduction to using Chai with Mocha using expect and should
An introduction to using Chai with Mocha using expect and should
A brief overview of writing tests with Mocha
Learn how to upload files to Amazon S3 using the AWS Node.js SDK
WebSockets enable two-way communication between browser and server, including pushing updates to the browser. Here's how you can use websockets in Node.js
A brief introduction to Vue CLI with video
A tutorial describing the basics of Vue components: templates, data, props, and events
Learn how Webpack's watch mode (--watch) works, with examples.
Learn how to run Webpack from your Node.js scripts, no CLI required
Learn how to replace all instances of a given substring in a JavaScript string
Learn how to use the vue-template-compiler npm module to compile Vue templates
Learn how to use the built-in `Array#sort()` function in JavaScript
Learn how to use ES6 maps.
Learn how to compare two strings in JavaScript: whether one string is greater than, less than, or equal to the other.
Learn how to handle page navigation in Vue using Vue Router
Learn how to define templates in Vue using string templates, inline templates, and single file components.
Learn how to run `webpack --watch` from your Node.js dev server using the Webpack Node API
Learn how to upload files using Express, with help from the library Formidable.
Express doesn't support promises by default. Learn what you can do about it.
Learn how to use insert a document in Mongoose if it doesn't already exist
Learn how to use Axios interceptors to make HTTP error messages readable
Learn how to check if a string contains a substring in vanilla JavaScript
Learn how to iterate nested arrays, object keys, and other values using forEach() in JavaScript
Learn how to redirect to a different URL using Express
Learn how to embed arbitrary content in Vue components using slots.
Learn about declaring and using virtuals in Mongoose.
Learn about the different ways to check if an object contains a given key in JavaScript
Learn how to use vuex, the official state management library for Vue
Learn how to enable your Express server to respond on https://localhost
Learn how to render Vue components on the server side with Express
Learn how to do HTTP basic authentication using Axios
Learn about formatting dates using the `toLocaleString()` function, with no outside libraries
Learn about the different ways to update a document in Mongoose.
Use Mathjs to calculate standard deviation in Node.js and the browser.
Learn what String valueOf(), Number valueOf(), and Date valueOf() have in common.
Learn how to understand and debug E11000 errors in Mongoose.
Learn how to get the current Unix time in JavaScript.
Learn how to set HTTP request headers on GET and POST requests with the Axios HTTP client.