Ich lerne NodeJS und versuche, lokal eine gefälschte Website einzurichten. Grundsätzlich ist es eine Website, die die WOW AuctionHouse API verwendet. Ich nehme die Daten aus der Anfrage, parse sie zu JSON und versuche, sie in die DB zu schreiben. Das Problem ist, wenn ich die Auktionen.save innerhalb der Anfrage stelle, erkennt es nicht die .save Funktion als eine Funktion (vorausgesetzt ich bin außerhalb des Bereichs dafür) und wenn ich es außerhalb des Problems stelle, kommt es von der asynchronen Natur, und ich bekomme ein leerer Eintrag in meiner Datenbank. Hier ist der Code:Abrufen von API-Daten und Schreiben in MongoDB mit NodeJS
var express = require('express');
var hbs = require('express-hbs');
var mongoose = require('mongoose');
//var blizzard = require('blizzard.js').initialize({ apikey: "xxx" });
mongoose.connect('mongodb://127.0.0.1/blood_of_sargeras')
var post = mongoose.model(
'post',
{
name: String,
type: String,
price: String
});
var app = express();
app.engine('hbs', hbs.express4({
partialsDir:__dirname+'/views/partials'
}));
app.set('view engine', 'hbs');
app.set('views', __dirname + '/views');
app.use('/static', express.static('static'));
var request = require("request");
var url = "http://auction-api-eu.worldofwarcraft.com/auction-data/xxx-xxx/auctions.json"
var auctions = new post;
request({
url: url,
json: true
}, function (error, response, body) {
if (!error && response.statusCode === 200) {
auctions = JSON.stringify(body);
post.save(function (err) {
if(err)
console.log("Error with database!");
else
console.log("Data written to DB!");
})
}
});
app.get('/', function (req, res){
post.find({}, function (err, o){
if (err)
console.log('Database error!');
else{
res.render('index', o);
}
});
});
app.listen(80, function(){
console.log('Listening on port 80')
});
Ist dies auch der richtige Weg, es zu tun? Gibt es einen besseren Weg? Ich habe eine ganze Weile daran fest gehalten und es wurde extrem frustrierend. Andere Dinge, die ich versuchte, sind:
- Timeout-Funktion außerhalb der Anforderung, so dass es für die ganze Sache wartet kopiert werden, aber das funktioniert nicht bekomme ich das gleiche Problem, wie es innen versuchen, heißt es .save nicht a Funktion
- Versuchte Aufruf einer Funktion auf dem äußersten Bereich definiert, während in der Anfrage, aber das sagt mir auch .save ist keine Funktion.
starten: var postSchema = mongoose.Schema ({name: String, mtype: String, Preis: Zeichenfolge}); varpost = mongoose.model ('Post', postSchema); var newPost = neues Kätzchen(); newPost.name = newPost.mType = // nicht Typ verwenden sie reserviert ist newPost.price = newPost.save (function (err, mpost) { if (err) console.error (err); console.log (mPost); }); –
Ich bin nicht sicher, was das ist, zu tun suposed zu, aber ich habe den exakt gleichen Fehler: newPost.price = newPost.save (function (err, mpost) { ^ Typeerror: newPost.save ist keine Funktion Auch soweit ich weiß, es ist ein Problem mit dem Umfang des Mungos (wo ich es verwenden kann) – Dragan