如何在node js中使用GET方法从MongoDB获取特定数据?

问题描述 投票:0回答:1

我有一些集合存储在远程 MongoDB 服务器上。我正在尝试根据城市名称获取特定的集合。我正在使用 POSTMAN 模拟 GET 请求,但正在执行不同的 GET 方法:

{
    message: "get is working!"
}

这是代码:

const express = require('express');
const router = express.Router();
const mongoose = require('mongoose'); 
const schema = require('../schemes/host_details');

router.get('/', (req, res, next)=>{
    res.status(200).json({
        message: 'get is working!'
    }); });

router.post('/', (req, res, next)=>{
    const host = new schema({
        _id: new mongoose.Types.ObjectId(),
        First_Name: req.body.f_name,
        Last_Name: req.body.l_name,
        State: req.body.state,
        City: req.body.city,
        Street_Address: req.body.st_address,
        Postal_Code: req.body.postal,
        Model_Make: req.body.model,
        Price: req.body.price,
        Lat: req.body.lat,
        Lng: req.body.lng
    });
    host.save().then(result=>{
        console.log(result);
    }) 
    .catch(err=>console.log(err));
    res.status(200).json({
        message: 'everthing will be ok, just hang in there!',
        createdHost: host
    }); });

router.get("/:city_name", (req, res, next)=>{

    const city_name_code = req.params.city_name;
    schema.findById(city_name_code).exec().then(doc=>{
        console.log(doc);
        res.status(200).json(doc);
    })
    .catch(err=>{console.log(err);
    res.status(500).json({error: err}); });

});

module.exports = router;

我的App.js代码-

const express=require('express');

const app=express();
var cors=require('cors'); 
const bodyParser=require('body-parser'); 
const mongoose=require('mongoose'); 
const host_details =require('./routes/host_details');


app.use(cors({origin:true,credentials:true}));
app.use(bodyParser.urlencoded({extended:false}));
app.use(bodyParser.json());
mongoose.connect('mongodb+srv://xxx:xxxxxxxxxxxxxxxx.mt4xvth.mongodb.net/?retryWrites=true&w=majority&appName=xxxxxxxxxxxxxxx')


// app.use((req,res,next)=>{ 
//     res.status(200).json({ 
//         message:'abc' 
//     }); 
// });

app.use((req,res,next)=>{
    res.header("Access-Control-Allow-Origin","*");
    // res.header("Access-Control-Allow-Origin","Origin, X-Requested-With, Content-Type, Accept, Authorization");

    if(req.method==='OPTIONS')
    {
        res.header('Access-Control-Allow-Methods','PUT,POST,PATCH,DELETE');
        return res.status(200).json({});
    }
    next(); 
});


app.use('/hostdetails',host_details); 
module.exports= app;

node.js mongodb express mongoose postman
1个回答
0
投票

在 Express 中,

req.query
req.params
之间存在差异。

您正在尝试导航至:

http://www.example.com/hostdetails/?City=Dublin

就 Express 而言,您已正确安装路由器,但因为您有:

/?City=Dublin

然后你尝试实现一个查询字符串,这样就变成了

req.query

但是您在这里使用

req.params

const city_name_code = req.params.city_name;

解决方案

将您的邮递员请求发送至:

http://www.example.com/hostdetails/Dublin

然后在您的代码中,您需要根据您的架构搜索

City
:

schema.findOne({City: city_name_code}).then(doc=>{
   console.log(doc);
   res.status(200).json(doc);
})
© www.soinside.com 2019 - 2024. All rights reserved.