Параметр запроса из req.params.foo в mongoose find () не работает или возвращает пустой массив - PullRequest
0 голосов
/ 10 апреля 2019

Я пишу простую демо-версию rest-api, маршрут по умолчанию / api работает отлично, возвращая все результаты (изображение ниже), но я нахожусь на контрольно-пропускном пункте. Что это, когда я печатаю: <a href="http://localhost:5050/api/interpol" rel="nofollow noreferrer">http://localhost:5050/api/interpol</a> где /interpol отображается на api/:params Я получаю пустой массив вместо документа, соответствующего исполнителю.

В качестве примечания, я использую 32-битную Ubuntu 14.04 (до этого не понимал), поэтому мне пришлось понизить версию mongodb и mongoose, чтобы они работали вместе, поэтому я использую Mongodb 2.2 .6 & Мангуст 4.0.8. Спасибо заранее.

Модель

// Dependencies
const mongoose = require('mongoose');
//Mongoose Schema
const Albums = new mongoose.Schema({
    title     : { type: String },
    releaseYr : { type: Date }
});

const MusicSchema = new mongoose.Schema({
    artist    : { type: String },
    albums    : [Albums]
});

mongoose.model('Music', MusicSchema);
module.exports = mongoose.model('Music');

Маршрутизатор

// Dependencies
const express = require('express');
const Music = require('../models/musicModel');
const musicRouter = express.Router();

// Routes
musicRouter.get('/', (req, res) => {
    Music.find({}, (err, artists) => {
        res.json(artists)
    })
});

musicRouter.route('/:artistName').get((req, res) => {
    const artistName = req.params.artistName;

    Music.find({ artist: artistName }, (err, artist) => {
        res.json(artist)
    });
});

module.exports = musicRouter;

App

// Dependencies
const express = require('express'),
      bodyParser = require('body-parser'),
      Mongoose = require('mongoose'),
      Joi = require('joi');

// Initiate express      
const app = express();

// Import musicRouter to handle api routes
const musicRouter = require('./api/musicRouter');

// Downgraded to Mongodb 2.2.6 & Mongoose 4.0.8
// Connect to Mongo database via Mongoose
Mongoose.connect('mongodb://localhost:27017/music1', {useNewUrlParser: true});

// Middleware
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));

// Send routes to musicRouter
app.use('/api', musicRouter);

module.exports = app;

Result of localhost:5050/api

1 Ответ

0 голосов
/ 10 апреля 2019

Как и во всех JavaScript, Mongodb выполняет поиск с учетом регистра.

Вы запрашиваете { artist: 'interpol' } Но, ссылаясь на изображение, вы сохранили его как Interpol.

* 1006.* Поэтому отправьте запрос как /api/Interpol или выполните поиск case-insensitive, используя regex, как указано здесь
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...