我在學習NodeJS並試圖在本地建立一個模擬網站。基本上,它是一個使用WOW AuctionHouse API的網站。我從請求中獲取數據,將其解析爲JSON並嘗試將其寫入數據庫。問題是,如果我把auctions.save放入請求中,它不會將.save函數識別爲一個函數(假設它不在該範圍之內),並且如果我將它放在問題的外面,則來自異步特性,我的數據庫中有一個空條目。這裏是代碼:獲取API數據並使用NodeJS寫入MongoDB
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')
});
這是甚至正確的方法嗎?有沒有更好的辦法?我一直堅持這一段時間,它變得非常令人沮喪。其他的事情我想是:要複製,因此等待整個事情的要求外
- 超時功能,但不工作我得到同樣的問題,因爲裏面嘗試它 ,它說.save不是函數
- 嘗試調用在outtermost作用域上定義的函數,而在請求內但這也告訴我.save不是函數。
嘗試這種情況: VAR postSchema = mongoose.Schema({名稱:字符串,MTYPE:字符串,價格:串}); var post = mongoose.model('Post',postSchema); var newPost = new Kitten(); newPost.name = newPost.mType = //不使用它被保留型 newPost.price = newPost.save(功能(ERR,mPost){ 如果(ERR)console.error(ERR); console.log(mPost); }); –
林不知道這是什麼suposed做的,但我得到確切同樣的錯誤: newPost.price = newPost.save(函數(ERR,mPost){ ^ 類型錯誤:newPost.save不是一個函數 另外,據我計算出它與貓鼬的範圍(我可以使用它的範圍)的問題 – Dragan