Я абсолютный новичок с узлом, и я искал ответ везде, но я не могу решить эту проблему.Я использую 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!'));