2016-11-30 5 views
0

У меня есть модель:мангуст модели обновления перед сохранением

const wordSchema = mongoose.Schema({ 
    author: {type: Object, default: 'unknown'}, 
    quote: String, 
    source: {type: String, default: 'unknown', index: true}, 
    rating: {type: Number, default: 0}, 
    createdAt: {type: Date, default: Date.now}, 
    updatedAt: {type: Date, default: Date.now}, 
}); 

Теперь после получения запроса POST на мой сервер, я хочу, чтобы сделать запрос GET в википедию, и получить информацию автора, а затем добавить его в моя модель как объект, и напишите эту модель в мою базу данных.

app.post('/', function(req, res) { 
    let author = {}; 
    let quote = new Word({ 
    author: req.body.author, 
    quote: req.body.quote, 
    source: req.body.source, 
    rating: req.body.rating, 
    }); 
    let authorName = req.body.author.replace(/ /g, '%20'); 
    let url = 'https://en.wikipedia.org/w/api.php?action=query&format=json&titles=' + authorName + '&prop=pageimages|extracts&pithumbsize=200&exsentences=10&exintro=true'; 
    request.get(url, (error, response, body) => { 
    if(error) { 
     return error; 
    } 
    let data = JSON.parse(body); 
    let pageID; 
    for(page in data.query.pages) { 
     pageID = page; 
    } 
    author = { 
     name: req.body.author, 
     thumbnail: data.query.pages[pageID].thumbnail.source, 
     flavorText: data.query.pages[pageID].extract, 
    }; 
    }); 
    // Save the quote 
    quote.pre('save', (next) => { 
    this.author = author; 
    }) 
    quote.save(function(err, quote) { 
    if (err) { 
     res.send(err); 
    } 
    res.redirect('/words'); 
    }); 
}); 

Теперь я попытался обновить значение с помощью функции .pre, но я получаю

quote.pre не является функцией

Что бы быть «правильный способ делать это и что я делаю неправильно?

ответ

0

quote не Mongoose схемы, но wordSchema так оно должно быть следующим:

wordSchema.pre('save', (next) => { 
    this.quote = whteverYouWantToAssignWith; 
}) 

Но на самом деле вам не нужно его в случае использования, насколько я понимаю, вы можете достичь что вы хотите, как следующие:

app.post('/', function(req, res) { 
    let authorName = req.body.author.replace(/ /g, '%20'); 
    let url = 'https://en.wikipedia.org/w/api.php?action=query&format=json&titles=' + authorName + '&prop=pageimages|extracts&pithumbsize=200&exsentences=10&exintro=true'; 
    request.get(url, (error, response, body) => { 
    if(error) { 
     return error; 
    } 
    let data = JSON.parse(body); 
    let pageID; 
    for(page in data.query.pages) { 
     pageID = page; 
    } 

    let quote = new Word({ 
     author: { 
     name: req.body.author, 
     thumbnail: data.query.pages[pageID].thumbnail.source, 
     flavorText: data.query.pages[pageID].extract, 
     }, 
     quote: req.body.quote, 
     source: req.body.source, 
     rating: req.body.rating, 
    }); 

    quote.save(function(err, quote) { 
     if (err) { 
     res.send(err); 
     } 
     res.redirect('/words'); 
    }); 
    }); 
}); 
+0

с этим, я просто получаю wordSchema не определен –

+0

вы должны поместить этот кусок кода, где схема определяется, конечно, не внутри функции запроса. –

+0

Итак, вы предлагаете мне переместить всю функцию HTTP-запроса в файл схемы? –

Смежные вопросы