猫鼬发现空响应

时间:2021-01-21 18:20:09

标签: node.js express mongoose

我尝试在 /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);

2 个答案:

答案 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});
    }
});