我正在做一个api休息,我想在其中使用Postman发出HTTP请求,特别是我想执行搜索或更新mongodb文档,但这必须是一个id,而不是提供mongo的doc_id

模型架构

'use strict'

 const mongoose = require('mongoose')
 const Schema   = mongoose.Schema

 const infoClientSchema = Schema ({
  idusr: String,                          /*this is require*/
  name: String,
  phone: Number,
  address: String,
  riff: String,
  state: String,
  city: String,
  email: {type: String}
})

module.exports = mongoose.model('InfoCli',infoClientSchema)


控制器(这是我使用findById知道的get方法,正在运行)

'use strict'

const InfoCli = require('../models/infoclient')

function getInfoCli(req, res){
    let infocliId = req.params.infocliId

    InfoCli.findById(infocliId, (err, infocli) =>{
        if (err) return res.status(500).send({message: 'Error making
                                                    request: $(err)'})

        if (!infocli) return res.status(404).send({message: 'The client does
                                                               not exist '})

        res.status(200).send({infoclient: infocli})
    })
}


控制器(这是我认为可以使用findOne的get方法)

function getInfoByUsr(req, res){
    let idusr = req.body.idusr

    InfoCli.findOne(idusr, (err, infocli) => {
        if (err) return res.status(500).send({message: 'Error making
                                                    request: $(err)'})

        if (!infocli) return res.status(404).send({message: 'The client does
                                                               not exist '})

        res.status(200).send({infoclient: infocli})

        console.log(infocli) /*The console is not showing anything*/
    })
 }


控制器(这是我认为可以使用findOneAndUpdate的put方法)

function updateByUsr(req, res){
    let idusr  = req.body.idusr
    let update = req.body

    InfoCli.findOneAndUpdate(idusr, update, (err, infocliUpdate) => {
        if (err) return res.status(500).send({message: 'Error making
                                                    request: $(err)'})

        if (!idusr) return res.status(404).send({message: 'The client does
                                                               not exist '})

        res.status(200).send({infocliente: infocliUpdate})
    })
 }


路线(对此不是100%肯定)

const express     = require('express')
const InfoCliCtrl = require('../controllers/infoclient')
const api         = express.Router()

api.get('/infoclient/:infocliId', InfoCliCtrl.getInfoCli) /*working*/
api.get('/infoclient/:idusr', InfoCliCtrl.getInfoByUsr)

最佳答案

我认为您只需要将getInfoByUsr()函数中的行let idusr = req.body.idusr更改为let idusr = req.params.idusr

http://expressjs.com/en/api.html#req.body
http://expressjs.com/en/api.html#req.params

还要检查一下findOne和findOneAndUpdate查询的语法(因为idusr不是Mongo _id,而是某种自定义字符串ID):

InfoCli.findOne({ idusr: idusr }, (err, infocli) => { ...
InfoCli.findOneAndUpdate({ idusr: idusr }, update, (err, infocliUpdate) => {..


http://mongoosejs.com/docs/api.html#model_Model.findOne

10-06 13:17