首页 > 解决方案 > POST 请求不起作用 - 使用 Mongoose 的 MongDB 和 Express JS

问题描述

我开始开发一个 MERN 应用程序,并正在尝试编写一个宁静的 api。代码工作正常。但是 POST 请求不起作用。

电影模型.js

const mongoose = require('mongoose')

const Schema = mongoose.Schema

const Movie = new Schema(
{
    name: { type: String, required: true },
    time: { type: [String], required: true },
    rating: { type: Number, required: true },
},
    { timestamps: true },
)

module.exports = mongoose.model('users', Movie)

电影控制.js

const Movie = require('../models/moviemodel')

createMovie = (req, res) => {
const body = req.body

if (!body) {
    return res.status(400).json({
        success: false,
        error: 'You must provide a movie',
    })
}

const movie = new Movie(body)

if (!movie) {
    return res.status(400).json({ success: false, error: err })
}

movie
    .save()
    .then(() => {
        return res.status(201).json({
            success: true,
            id: movie._id,
            message: 'Movie created!',
        })
    })
    .catch(error => {
        return res.status(400).json({
            error,
            message: 'Movie not created!',
        })
    })
}

index.js

const express = require('express')
const bodyParser = require('body-parser')
const cors = require('cors')
var MongoClient = require('mongodb').MongoClient;
const movieRouter = require('./routes/movierouter')


const app = express()
const apiPort = 3000

app.use(bodyParser.urlencoded({ extended: true }))
app.use(cors())
app.use(bodyParser.json())

MongoClient.connect('mongodb://127.0.0.1:27017/cinema', { useNewUrlParser: 
true }, function(err, client) {
const db = client.db('cinema')
if(err) throw err;
console.log('Successfully connected')
})

app.get('/', (req, res) => {
res.send('Hello World!')
})

app.use('/api', movieRouter)

app.listen(apiPort, () => console.log(`Server running on port 
${apiPort}`))

电影路由器.js

const express = require('express')

const MovieCtrl = require('../controllers/moviectrl')

const router = express.Router()

router.post('/movie', MovieCtrl.createMovie)
router.put('/movie/:id', MovieCtrl.updateMovie)
router.delete('/movie/:id', MovieCtrl.deleteMovie)
router.get('/movie/:id', MovieCtrl.getMovieById)
router.get('/movies', MovieCtrl.getMovies)

module.exports = router

当我使用链接 localhost:3000/api/movie 发送 POST 请求并通过 Postman 发送 JSON 数据时。没有回应。

https://imgur.com/a/l6GvDbu

标签: node.jsmongodbmongoose

解决方案


我已经测试了您的应用程序,发现您的数据库挂起...

用这个替换你的数据库连接:

const url = 'mongodb://localhost:27017/cinema';

mongoose.connect(url, {
    useUnifiedTopology: true,
    useNewUrlParser: true,
    useCreateIndex: true,
    useFindAndModify: false
}, console.log(`DB running on ${url}`));

https://imgur.com/gallery/q4Y0lW2


推荐阅读