- Three different feed types (RSS 2.0, ATOM 1.0 and JSON 1.0)
- As many feeds as you like!
- Completely customizable. Need to fetch data before? No problem!
- Works with all modes (yes, even generate!)
- Add
@nuxtjs/feed
dependency using yarn or npm to your project - Add
@nuxtjs/feed
tomodules
section ofnuxt.config.js
{
modules: [
// Simple usage
'@nuxtjs/feed',
],
feed: [
// Your feeds here
]
}
- Configure it as you need
So.. how to get these feeds working now?
{
//...
feed: [
// A default feed configuration object
{
path: '/feed.xml', // The route to your feed.
async create (feed) {}, // The create function (see below)
cacheTime: 1000 * 60 * 15, // How long should the feed be cached
type: 'rss2' // Can be: rss2, atom1, json1
}
],
//...
}
Let's take a closer look on the create
function. This is the API that
actually modifies your upcoming feed.
A simple create function could look like this:
create = async feed => {
feed.options = {
title: 'My blog',
description: 'This is my personal feed!',
}
const posts = await axios.get('https://blog.lichter.io/posts/').data
posts.forEach(post => {
feed.addItem({
title: post.title,
id: post.url,
link: post.url,
description: post.description,
content: post.content
})
feed.addCategory('Nuxt.js')
feed.addContributor({
name: 'Alexander Lichter',
email: '[email protected]',
link: 'https://lichter.io/'
})
}
Feed creation is based on the feed package.
Please use it as reference and further documentation for modifying the feed
object
that is passed to the create
function.
Using the create
function gives you almost unlimited possibilities to customize your feed!
There is one more thing. Imagine you want to add a feed per blog category, but you don't want to add every category by hand.
You can use a factory function
to solve that problem. Instead of a hardcoded array, you can setup
a function that will be called up on feed generation. The function must return an array with all
feeds you want to generate.
{
feed: async () => {
const posts = (await axios.get('https://my-url.com/posts')).data
const tags = (await axios.get('https://my-url.com/tags')).data
return tags.map(t => {
const relevantPosts = posts.filter(/*filter posts somehow*/)
return {
path: `/${t.slug}.xml`, // The route to your feed.
async create (feed) {
feed.options = {
title: `${t.name} - My blog`,
description: `All posts related to ${t.name} of my blog`,
}
relevantPosts.forEach(post => {
feed.addItem({
title: post.title,
id: post.id,
link: `https://blog.lichter.io/posts/${post.slug}`,
description: post.excerpt,
content: post.text
})
})
},
cacheTime: 1000 * 60 * 15,
type: 'rss2'
}
})
},
}
- Clone this repository
- Install dependencies using
yarn install
ornpm install
- Start development server using
npm run dev
Copyright (c) Alexander Lichter