我尝试在 /movies/{movieId}
路由上发出获取请求以获取电影信息,但我得到一个空数组。
我使用了 findOne()
函数并且得到了相同的空数组。
当我使用路径 /movies
时工作正常,我可以获取数据库中的所有电影。
app.js
const express = require('express');
const app = express();
const mongoose = require ('mongoose');
const bodyParser = require('body-parser');
require('dotenv/config');
app.use(bodyParser.json());
//Import routes
const postsRoute = require('./routes/posts');
const moviesRoute = require('./routes/movies');
app.use('/posts', postsRoute);
app.use('/movies', moviesRoute);
//Middlewares
app.use('/posts', () =>{
console.log('This is a middleware running');
})
//ROUTES
app.get('/', (req, res) =>{
res.send('We are on home');
})
//Connect to database
mongoose.connect(
process.env.DB_CONNECTION,
{ useNewUrlParser: true }, () =>{
console.log('Connected to the database!');
})
//How to start listen from server
app.listen(3000);
电影路线
const express = require('express');
const router = express.Router();
const Movie = require('../models/Movies');
//GET BACK ALL THE MOVIES
router.get('/', async (req, res) =>{
try{
const movies = await Movie.find();
res.json(movies);
}catch(err){
res.json({message : err});
}
})
//SUBMIT A MOVIE
router.post('/', async (req, res) => {
const movie = new Movie({
movieId: req.body.movieId,
tittle: req.body.title,
genres: req.body.genres
});
try{
const savedMovie = await movie.save();
res.json(savedMovie);
}catch(err){
res.json({message: err});
}
});
//SPECIFIC MOVIE
router.get('/:movieId', async (req, res) =>{
try{
const movie = await Movie.find({ movieId: req.params.movieId }).exec();
console.log(req.params.movieId);
console.log(movie);
res.json(movie);
}catch(err){
res.json({message: err});
}
});
module.exports = router;
电影模型
const mongoose = require('mongoose');
const MovieSchema = mongoose.Schema({
movieId: Number,
title: String,
genres: String
});
module.exports = mongoose.model('Movies', MovieSchema);
答案 0 :(得分:0)
为一个路由使用两个 GET 方法是不正确的,Express 无法识别这一点,它只能定义您编写的第一个 GET 方法! 因此,在您的代码中, "/" 和 "/:movieId" 都是 "/" 的路由,只有第一个有效。
解决方案: 在你的 moviesRoute 中只使用一个路由并在那个路由中使用两种逻辑:
len()
答案 1 :(得分:0)
您应该将 movieId 转换为数字,如下所示:
router.get('/:movieId', async (req, res) =>{
try{
const movie = await Movie.find({ movieId: +req.params.movieId }).exec();
console.log(req.params.movieId);
console.log(movie);
res.json(movie);
}catch(err){
res.json({message: err});
}
});