简体   繁体   English

使用节点保存到 mongoDB 时遇到问题

[英]Having trouble saving to mongoDB using node

I'm attempting to save data from an API response and keep getting an empty object.我正在尝试从 API 响应中保存数据,并不断得到一个空的 object。 I placed a console.log in my code and it shows that I'm getting a response from the api.我在我的代码中放置了一个 console.log,它显示我收到了来自 api 的响应。 I seem to be missing something after the fetch request.在获取请求之后,我似乎遗漏了一些东西。

From index.js:来自 index.js:

const express = require('express')
const bodyParser = require('body-parser')
const path = require('path')
const fetch = require('node-fetch')
const exphbs = require('express-handlebars')
const db = require('./src/models/movie')
require('./src/db/mongoose')
const Movie = require('./src/models/movie')

const app = express()
const port = process.env.PORT || 3000

// APP CONFIG
app.use(express.json())
app.use(bodyParser.urlencoded({extended: true}))

// ROUTES - ADD
app.post('/movies/:imdbID', (req, res) => {
    const imdb = req.params.imdbID
    const url = `**api link and key**${imdb}`

    const movie = fetch(url).then((res) => {
        return res.json()
    }).then((response) => {
        console.log(response)
        const addMovie = new Movie(response)
        db.Movie.create(addMovie, (err, newMovie) => {
            if(err){
                res.render('movie404')
            } else {
                res.redirect('/')
            }
        })
    }).catch((e) => {
        res.status(500).send(e)
    }) 
})

From mongoose.js:来自 mongoose.js:

const mongoose = require('mongoose')

mongoose.connect('mongodb://127.0.0.1:27017/movietime-api', {
    useNewUrlParser: true,
    useCreateIndex: true,
    useUnifiedTopology: true,
    useFindAndModify: false
})

From details.handlebars:来自 details.handlebars:

<h2>{{details.Title}}</h2>
<img src="{{details.Poster}}" alt="{{details.Title}}">
<p><em>{{details.Plot}}</em></p>
<p>Starring: {{details.Actors}}</p>
<p>Director: {{details.Director}}</p>
<form action="/movies/{{details.imdbID}}" method="POST">
    <button type="submit">Add</button>
</form>

From movie.js:来自电影.js:

const mongoose = require("mongoose");常量 mongoose = 要求(“猫鼬”);

// MONGOOSE/MODEL CONFIG
const Movie = mongoose.model('Movie',{
    imdbID: String,
    Title: String,
    Poster: String,
    Director: String,
    Year: String,
    Plot: String,
    Ratings: String,
    Rated: String,
    Genre: String,
    Writer: String,
    Actors: String
});

module.exports = Movie;

I would expect a redirect to the index page then a new database entry using the above model.我希望重定向到索引页面,然后使用上述 model 进行新的数据库条目。

you are almost there just few thing needs to be taken care of:你几乎有几件事情需要照顾:


app.post('/movies/:imdbID', (req, res) => {
    const imdb = req.params.imdbID
    const url = `**api link and key**${imdb}`

    const movie = fetch(url).then((res) => {
        return res.json()
    }).then((response) => {
        console.log(response)
        const addMovie = new Movie(response)

        addMovie.save((err, newMovie) => {
            if(err){
                res.render('movie404',newMovie) // to render the details
            } else {
                res.redirect('/')
            }
        })
    }).catch((e) => {
        res.status(500).send(e)

ref参考

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM