Не удается создать REST API с более длинным путем - PullRequest
0 голосов
/ 13 апреля 2019

Я абсолютный новичок с узлом, и я искал ответ везде, но я не могу решить эту проблему.Я использую Express, Mongoose и Vuex.

Я в основном хочу определить две конечные точки: одну для получения фотографий для конкретного пользователя, а другую - для получения всех фотографий всеми пользователями.Моя первая конечная точка - / api / photos, и она отлично работает, но / api / photos / all всегда выдает ошибку.Однако я знаю, что нет ничего плохого в том, как я делаю запрос в Vuex, потому что если я заменю код внутри / photos на код, предназначенный для / photos /, все это работает.Я пробовал всевозможные альтернативы / photos / ____, но похоже, что ему не нравится путь?Ошибка узла не помогает, потому что она говорит

CastError: сбой приведения к ObjectId для значения «все» в пути «_id» для модели «Фото»

, но я знаю, что это не проблемапотому что оба вызова работают, когда я определяю конечную точку как / photos вместо.

Вот мой store.js

async getAllPhotos(context) {
  try {
    let response = await axios.get("/api/photos/all");
    context.commit('setPhotos', response.data);
    return "";
  } catch (error) {
    return "";
  }
},
async getOnePhoto(context, id) {
  try {
    let response = await axios.get("/api/photos/" + id);
    context.commit('setSelectedPhoto', response.data);
  } catch (error) {
    return "";
  }
},

my photo.js:

const mongoose = require('mongoose');
const express = require("express");
const router = express.Router();
const auth = require("./auth.js");

// Configure multer so that it will upload to '/public/images'
const multer = require('multer')
const upload = multer({
    dest: '../public/images/',
    limits: {
        fileSize: 10000000
    }
});

const users = require("./users.js");
const User = users.model;

const photoSchema = new mongoose.Schema({
    user: {
        type: mongoose.Schema.ObjectId,
        ref: 'User'
    },
    path: String,
    title: String,
    description: String,
    name: String,
    created: {
        type: Date,
        default: Date.now
    },
});

const Photo = mongoose.model('Photo', photoSchema);
// get photos for user
router.get("/", auth.verifyToken, User.verify, async (req, res) => {
    try {
        let photos = await Photo.find().sort({
          created: -1
        }).populate('user');
        return res.send(photos);
      } catch (error) {
        console.log(error);
        return res.sendStatus(500);
      }
});

// get all photos THIS DOESNT WORK NO MATTER WHAT CODE GOES IN
router.get("/all", async (req, res) => {
    // return photos
    try {
        let photos = await Photo.find({
            user: req.user
        }).sort({
            created: -1
        });
        return res.send(photos);
    } catch (error) {
        console.log(error);
        return res.sendStatus(500);
    }
  });

// get individual photo
router.get("/:id", async (req, res) => {
    try {
        // console.log("I'm here")
        let photo = await Photo.findOne({ 
            _id: req.params.id 
        });
        res.send(photo);
    } catch (error) {
        console.log(error);
        res.sendStatus(500);
    }
})

имой сервер.js:

const express = require('express');
const bodyParser = require("body-parser");

const app = express();
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
  extended: false
}));

const mongoose = require('mongoose');

// connect to the database
mongoose.connect('mongodb://localhost:27017/photobomb', {
  useNewUrlParser: true
});

const cookieParser = require("cookie-parser");
app.use(cookieParser());

const users = require("./users.js");
app.use("/api/users", users.routes);

const photos = require("./photos.js");
app.use("/api/photos", photos.routes);

const comments = require("./comments.js");
app.use("/api/comments", comments.routes);

app.listen(4000, () => console.log('Server listening on port 4000!'));

1 Ответ

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

Ошибка приведения указывает на то, что вы можете использовать неправильный параметр для поиска данных. Из приведенного выше кода я считаю, что вы пытаетесь получить все фотографии запрашиваемого пользователя, если это так, схема пользователя должнаиметь ключ фотографии, связанный с коллекцией фотографий с помощью objectId, как показано ниже, поэтому вы можете запросить пользователя и заполнить параметр images, который даст список изображений, связанных с пользователем. Найдите ассоциацию коллекции в mongoose с OBJECTID В чем ошибка Mongoose Ошибка приведения к ObjectId для значения XXX по пути "_id"? эта ссылка объясняет ошибку, которую вы получили. Надеюсь, она вам поможет

{
   "user":String,
   "images":["imgs":{
                "type":mongoose.Schema.Types.ObjectId,
                "ref":"Photos"  
               }]

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...