繁体   English   中英

获取我的收藏,req.query (express,node.js)

[英]Get my collection, req.query (express,node.js)

我想恢复我在数据库中的收藏。 问题是我的查询仍未定义。

这是我的要求:

const products = {
  getProducts: async (req, res) => {
    const productId = req.query.id;
    console.log(productId);
    const product = await ProductsModel.find({}).exec();

    if (product instanceof Error) {
      res.status(500).json({ message: "Error" });
      return;
    }

    res.json(product);
  },
};
module.exports = products;

我的 mongoose 模式:


const ProductSchema = new mongoose.Schema({
  image: {
    type: String,
  },
  title: {
    type: String,
  },
  description: {
    type: String,
  },
  price: {
    type: Number,
  },
  category: {
    type: String,
  },
});

const Products = mongoose.model("Products", ProductSchema);

module.exports = Products;

我的获取:

const [products, setProducts] = useState([]);
useEffect(getProducts, []);

async function getProducts() {
    const options = {
      method: "GET",
    }

    const response = await fetch("http://localhost:8000/products", options);
    const productsData = await response.json();

    setProducts(productsData);
    console.log(productsData);
  }

我的错误信息:

[nodemon] 由于更改而重新启动...

[nodemon] 起始node ./bin/www

(节点:4279)弃用警告:不推荐使用 collection.ensureIndex。 请改用 createIndexes。

(使用node --trace-deprecation ...显示警告的创建位置)

不明确的

GET /products 304 14.493 毫秒 - -

预先感谢您的帮助。

首先,从您的架构文件导出时,您已完成:

module.exports = Products;

但是在您获取产品时的请求文件中,您已经完成了:

const product = await ProductsModel.find({}).exec();

您应该将其替换为:

const product = await Products.find({}).exec();

在 req.query未定义,因为在服务器请求时您尚未通过查询。 要传递查询使用?id=在您的提取文件中,您应该进行以下更改:

const response = await fetch("http://localhost:8000/products?id="+productId, options);

或者,您也可以使用模板文字`` ,这是一个很好的做法。

const response = await fetch(`http://localhost:8000/products?id=${productId}`, options);

对于弃用警告,您必须在连接数据库的地方进行以下更改。

  mongoose.connect('mongodb://localhost:27017/name',{
  useNewUrlParser: true,
  useUnifiedTopology: true,
  useCreateIndex:true},()=>{console.log('database connected')}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM