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。
网友评论