【发布时间】:2019-09-04 03:06:33
【问题描述】:
我是 node 的初学者,我到处寻找答案,但我似乎无法解决这个问题。我正在使用 express、mongoose 和 Vuex。
我基本上想定义两个端点——一个用于获取特定用户的照片,另一个用于获取所有用户的所有照片。我的第一个端点是 /api/photos,它运行良好,但 /api/photos/all 总是会出现错误。但是,我知道我在 Vuex 中发出请求的方式没有任何问题,因为如果我将 /photos 中的代码替换为 /photos/all 的代码,它就可以工作。我已经尝试了 /photos/____ 的各种替代方案,但它似乎不喜欢这条路?节点错误没有帮助,因为它说
CastError:模型“Photo”的路径“_id”处的值“all”转换为 ObjectId 失败
但我知道这不是问题,因为当我将端点定义为 /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 "";
}
},
我的 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);
}
})
还有我的 server.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!'));
【问题讨论】:
-
路由序列有问题,请提供
./photos.js的代码,以便我们推荐 -
@ArifKhan 完成!
-
提供
./photos.js的完整代码,肯定有2条路线会产生冲突。在前端,我可以看到axios.get("/api/photos/all")和axios.get("/api/photos/" + id);,但在后端,您没有提供必须类似于/api/photos/:id的路由 -
啊,是的。我已经添加了@ArifKhan
标签: node.js express vue.js mongoose vuex