如何构建Node.js博客API

如何构建Node.js博客API

在这篇文章中,我们将使用Node.js创建一个博客API。博客API是一个用户可以通过它从服务器获取博客、写入博客、删除博客甚至根据各种参数过滤博客的API。

功能:

  • 获取博客
  • 创建博客
  • 删除博客
  • 过滤博客

方法: 在这个项目中,我们将使用一些模块,如express用于编写代码,body-parser用于获取用户输入值,mongoose用于连接MongoDB数据库。然后,我们将为不同的目的创建不同的路由,比如获取博客的get路由,发布博客的post路由,删除博客的delete路由。

实现: 下面是上述方法的逐步实现。

步骤1:项目设置

初始化NPM: 创建并定位您的项目文件夹到终端,并输入以下命令。

npm init -y

它初始化了我们的节点应用程序并创建了一个 package.json 文件。

安装依赖项: 将您的项目根目录定位到终端,并键入以下命令

npm install express

将Express作为项目的依赖项安装:

创建服务器文件: 创建一个名为‘app.js’的文件,在这个文件中,使用require引入express模块,并创建一个名为‘app’的常量,用于创建express模块的实例。

const express = require('express')

const app = express()

获取数据到app.js: 要接收输入值,我们必须使用一个名为body-parser的node包。

安装body-parser:

npm install body-parser

需要 body-parser 模块:

const bodyParser = require('body-parser')

然后:

app.use( bodyParser.json() );      
app.use(bodyParser.urlencoded({    
    extended: true
}));

然后我们可以使用请求对象来处理输入数据。

连接数据库: 为了连接MongoDB数据库,我们需要使用一个名为mongoose的模块。

安装Mongoose:

npm i mongoose

将其连接到本地 MongoDB 数据库:

mongoose.connect("mongodb://localhost:27017/blogApi", {
   useNewUrlParser: true,
   useUnifiedTopology: true
});

创建一个用于存储博客的模式,然后使用该模式创建一个名为Blog的模型:

const blogSchema = {
   title: String,
   content: String,
}

const Blog = mongoose.model("Blog", blogSchema);

步骤2:获取博客:

现在让我们为获取所有博客设置一个get路由,在这个路由中,我们将使用find方法,并将参数设置为无,这将获取所有的博客,然后我们将将其发送到响应中,如果找到错误,则发送错误信息。

app.get('/blogs', (req, res) => {
   Blog.find({}, (err, blog) => {
       if (err) {
           res.send(err);
       } else {
           res.send(blog);
       }
   })
})

步骤3:筛选博客: 修改路由,提供一个选项来按标题获取博客。在这个路由中,我们将使用find方法并将请求的标题作为参数传递,这将获取到请求的博客,然后我们将将其发送到响应中,如果找不到,则发送错误信息。

app.get('/blogs/:blogTitle', (req, res) => {
   Blog.find({ title: req.params.blogTitle }, (err, blog) => {
       if (err) {
           res.send(err);
       } else {
           res.send(blog);
       }
   })
})

步骤4:创建博客: 现在,让我们设置一个帖子路由,我们将使用bodyparser获取用户输入的值,如标题和内容,然后创建一个新博客,保存它,然后发送成功消息,或者如果发现错误,则发送错误消息。

app.post('/blogs', (req, res) => {
   const title = req.body.title
   const content = req.body.content
   const blog = new Blog({
       title: title,
       content: content
   })
   blog.save(err => {
       if(err) {  res.send(err); }
       else { res.send('blog added!'); }
   });
})

步骤5: 删除博客: 现在,让我们设置一个删除路由,在这个路由中,我们将使用bodyparser来获取用户输入的标题值,然后使用带有标题参数的delete方法来删除具有相同标题的博客,然后发送一个成功的消息或发送错误消息(如果找到)。

app.delete('/blogs', (req, res) => {
   const title = req.body.title
   Blog.deleteOne({ title: title }, (err, blog) => {
       if (err) {
           res.send(err);
       } else {
           res.send("blog deleted!");
       }
   })
})

步骤6:设置一个端口来运行我们的服务器: 我们将使用express的listen方法来完成。

app.listen(3000, () => {
   console.log("listening on http://localhost:3000");
})

完整代码:

const express = require('express')
const bodyParser = require('body-parser')
const mongoose = require('mongoose')
 
const app = express()
 
app.use(bodyParser.urlencoded({
    extended: true
}))
 
mongoose.connect("mongodb://localhost:27017/blogApi", {
    useNewUrlParser: true,
    useUnifiedTopology: true
});
 
const blogSchema = {
    title: String,
    content: String,
}
 
const Blog = mongoose.model("Blog", blogSchema);
 
app.get('/blogs', (req, res) => {
    Blog.find({}, (err, blog) => {
        if (err) {
            res.send(err);
        } else {
            res.send(blog);
        }
    })
})
 
app.get('/blogs/:blogTitle', (req, res) => {
    Blog.find({ title: req.params.blogTitle }, 
    (err, blog) => {
        if (err) {
            res.send(err);
        } else {
            res.send(blog);
        }
    })
})
 
app.post('/blogs', (req, res) => {
    const title = req.body.title
    const content = req.body.content
 
    const blog = new Blog({
        title: title,
        content: content
    })
 
    blog.save(err => {
        if(err) {  res.send(err); }
        else { res.send('blog added!'); }
    });
})
 
app.delete('/blogs', (req, res) => {
    const title = req.body.title
 
    Blog.deleteOne({ title: title }, (err, blog) => {
        if (err) {
            res.send(err);
        } else {
            res.send("blog deleted!");
        }
    })
})
 
app.listen(3000, () => {
    console.log("listening on http://localhost:3000");
})

运行应用程序的步骤: 在终端内键入以下命令

node app.js

输出:

如何构建Node.js博客API

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程