美文网首页
在 Node.js 中创建 REST API

在 Node.js 中创建 REST API

作者: 追梦人在路上不断追寻 | 来源:发表于2021-06-14 21:46 被阅读0次

1.首先我们必须在我们的API中制作我们想要的数据类型的模式,我们将为商店中的产品制作模式

在主目录下创建一个文件夹命名模型,并创建一个名为Products.js的文件和以下代码。

const mongoose = require('mongoose') // 需要创建模式const ProductSchema = mongoose.Schema({ 
 name: { 
 type: String, 
 required: true 
 }, 
 price: { 
 type: Number, 
 required: true, 
 }, 
}) 

// 我们正在导出表 Products 的架构。

module.exports = mongoose.model('Products', ProductSchema)

2 我们必须定义检索数据和发布数据的路由

在主目录中创建一个文件夹名称路由,然后创建一个名为product.js的文件

进入主目录的app.js,在mongodb连接代码前写下product route的入口代码如下:

// 为我们的产品创建 /products 路由

const ProductRoute = require('./Routes/Product'); 
app.use('/products', ProductRoute

转到routes文件夹中的product.js文件,开始制作 get 和 post 路由,如下所述:

// 我们正在制作 express 路由器来处理不同类型的请求,比如 get/post/patch/delete**
const express = require('express') 
const router = express.Router()
// 我们将在下一步制作这个文件,它将处理我们所有的逻辑** 
const ProductController = require('../controllers/product')**
// 所有这些路由都适用于我们的产品,如下所示:
//(http://localhost:5000/products/get)用于获取所有产品
//(http://localhost:5000/products/post)用于发布产品

router.get('/get',ProductController.get_all_product);
router.post('/post',ProductController.create_product)
router.get('/:productId',ProductController.get_single_product)
router.patch('/:productId',ProductController.patch_product_details)
router.delete('/:productId',ProductController.delete_product)

module.exports = router

3.让控制器处理路由背后的所有逻辑

转到项目的主目录并创建名为controller的文件夹,并在其中创建一个名为product.js的文件

现在在这个文件中,路由背后的所有逻辑都将如下所示

对于 /get 请求:

// 产品表的架构
const Product = require('../models/Product')// get 请求获取所有产品的逻辑
exports.get_all_product = async (req, res) => { 
 try { 
 // 查找表中的所有产品
 const products = await Product.find() 
 // 签入控制台
 console.log(products) res.send(products) 
 }catch (err) { 
 res.send({ message: err }) 
 } 
}//获取单品的get请求逻辑export.get_single_product = (req, res) => { 
 const id = req.params.productId; //从参数中获取产品
 id Product.findById(id) 
 .then(result => { 
 res.send(result) // 如果找到产品则返回
 }) 
 .catch(err => { 
 res.send({message: err}) //如果没有找到产品会报错
 }) 
}

对于 /post 请求

export.create_product = async (req, res) => { 
 console.log(req.file) 

 // 从 post 请求的 json 正文中检索数据 const product = new Product({ 
 name: req.body.name, 
 price: req.body.price, 
 }); 
 product.save().then 
 (result => { 
res.status(200).send({ 
 _id: result._id, 
 name: result.name, 
 price: result.price, 
 request: { 
 type: 'GET', 
 url : 'http://localhost:5000/products/' + result._id 
 } 
 }) 
 }) 
 .catch(err => { 
 res.send({ message: err }) 
 }) 
}

对于 /patch 请求

export.patch_product_details = (req, res) => { 
 const id = req.params.productId; // 从 params 中获取产品 ID 
 const update = {} 
 // 检查 item 中要更新的值
 for (const ops of req.body) { 
 update[ops.propName] = ops.value; 
 } 
 Product.update({ _id: id }, { $set: update }) 
 .exec( ) .then 
 (result => { 
 res.send(result) 
 }) 
 .catch(err => { 
 res.send(err) 
 }) 
}

对于/delete请求

export.delete_product = (req, res) => { 
 const id = req.params.productId; // 检查 productId 以删除
 Product.remove({ _id: id }) // 从表中删除产品
 .exec() .then 
 (result => { 
 res.send(result) // 将结果发送回来
 }) 
 .catch (err => { 
 res.send(err) // 如果产品没有更新则发送错误
 }) 
}

我们已经完成了 API 工作所需的所有路由和逻辑,您可以通过尝试使用 Postman 等任何 API 测试工具来检查您的 API。

相关文章

网友评论

      本文标题:在 Node.js 中创建 REST API

      本文链接:https://www.haomeiwen.com/subject/rwaoeltx.html