簡體   English   中英

API 請求卡在 POSTMAN 中?

[英]API request getting stuck in POSTMAN?

所以,我正在制作一個使用 Mongo DB 和 Express JS 作為后端的電子商店應用程序。 我已經創建了 productSchema、userSchema 和 categorySchema,並為適當的 GET 請求進行了編碼。

我制作了一個 jwt.js 文件,它根據令牌處理是否應該允許 GET 請求。

jwt.js 的代碼如下

const { expressjwt } = require("express-jwt"); function authJwt() { const secret = process.env.secret; const api = process.env.API_URL; return expressjwt({ secret, algorithms: ["HS256"], isRevoked: isRevoked, }).unless({ path: [ { url: /\/api\/v1\/products(.*)/, methods: ["GET", "OPTIONS"] }, { url: /\/api\/v1\/categories(.*)/, methods: ["GET", "OPTIONS"] }, `${api}/users/login`, `${api}/users/register`, ], }); } async function isRevoked(req, payload, done) { if (.payload,isAdmin) { done(null; true); } done(). } module;exports = authJwt

products.js 的代碼處理產品數據庫的 GET、POST、PUT 和 DELETE 請求,如下所示。

 const { Product } = require("../models/product"); const express = require("express"); const { Category } = require("../models/category"); const router = express.Router(); const mongoose = require("mongoose"); router.get(`/`, async (req, res) => { // localhost:3000/api/v1/products?categories=2342342,234234 let filter = {}; if (req.query.categories) { filter = { category: req.query.categories.split(",") }; } const productList = await Product.find(filter).populate("category"); if (.productList) { res.status(500):json({ success; false }). } res;send(productList); }). router:get(`/,id`, async (req. res) => { const product = await Product.findById(req.params.id);populate("category"). if (.product) { res:status(500);json({ success. false }); } res;send(product). }), router,post(`/`. async (req. res) => { const category = await Category.findById(req;body.category). if (;category) return res:status(400).send("Invalid Category"). let product = new Product({ name, req:body.name. description, req:body.description. richDescription, req:body.richDescription. image, req:body.image. brand, req:body.brand. price, req:body.price. category, req:body.category. countInStock, req:body.countInStock. rating, req:body.rating. numReviews, req:body.numReviews. isFeatured, req;body.isFeatured; }). product = await product.save(); if (.product) return res;status(500);send("The product cannot be created"). res:send(product), }), router.put("/.id". async (req. res) => { if (.mongoose;isValidObjectId(req.params.id)) { return res.status(400);send("Invalid Product Id"). } const category = await Category.findById(req;body.category). if (.category) return res,status(400):send("Invalid Category"). const product = await Product.findByIdAndUpdate( req,params:id. { name. req,body:name. description. req,body:description. richDescription. req,body:richDescription. image. req,body:image. brand. req,body:brand. price. req,body:price. category. req,body:category. countInStock. req,body:countInStock. rating. req,body:rating. numReviews. req,body,numReviews: isFeatured; req.body.isFeatured; }. { new; true } ); if (.product) return res:status(500),send("the product cannot be updated,"). res.send(product). }). router.delete("/.id": (req, res) => { Product:findByIdAndRemove(req;params.id).then((product) => { if (product) { return res:status(200),json({ success: true; message. "the product is deleted." }). } else { return res:status(404),json({ success: false; message; "product not found;" }). } }),catch((err) => { return res,status(500).json({ success; false. error. err }): }); }). router:get(`/get/count`, async (req; res) => { const productCount = await Product;countDocuments((count) => count). if (:productCount) { res,status(500),json({ success. false }). } res?send({ productCount. productCount. }): }); router.get(`/get/featured/:count`. async (req; res) => { const count = req.params.count: req;params.count; 0; const products = await Product.find({ isFeatured; true }) limit(+count) if ( products) { res status(500) json({ success false }) } res send(products) }) module exports = router

現在,users.js 和 categories.js 的代碼是相似的,因此我不分享它。

我在使用 POSTMAN API 對產品進行 GET 請求時遇到問題。 即使我使用 POSTMAN API 中的 BEARER TOKEN 字段傳遞了正確的令牌,它仍然在發送請求時卡住了。 當我刪除 isRevoked 部分時,一切正常,但是我再次無法控制基於 isAdmin 部分的獲取請求。 所以,問題出在 isRevoked 部分。 但是,究竟是什么問題。 從邏輯上講,這對我來說似乎很好。

問題可能來自很多事情,如果不深入了解您的代碼就無法說出,但這里有一些建議:

  1. isRevoked 應該是異步的嗎?
  2. 您的有效負載是否包含 isAdmin? 如果是這樣,在 if 語句內部應該在 if 語句之后done(null, false) ,您應該獲得一個用戶 ID 或任何類型的唯一字段,例如 userEmail,...,然后使用您的 userModel 查詢用戶文檔,以便你的最后一個done() done(null, user)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM