NodeJSを学習し、模擬ウェブサイトをローカルに配置しようとしています。基本的には、WOW AuctionHouse APIを使用するWebサイトです。リクエストからデータを取り出し、JSONに解析してDBに書き込もうとします。問題は、auctions.saveをリクエスト内に置くと、関数として.save関数が認識されません(範囲がわからないと仮定します)。問題外に配置すると、非同期性の問題が発生します私のDBの空のエントリ。コードは次のとおりです。NodeJSを使用してAPIデータを取得して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')
});
これは正しい方法ですか?より良い方法がありますか?私はかなり長い間このことに固執しており、非常にイライラしています。私が試した他のものである:それは全体のことを待って要求外
- タイムアウト機能をコピーするが、それdoesntの仕事は、私は内部 それをしようとするのと同じ問題を取得し、それが.SAVEではないと言います関数
- 要求の中で最も外側のスコープで定義された関数を呼び出そうとしましたが、それはまた私に.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を){ IF(ERR)console.error(ERR)。 (mPost); }); –
これが行うことにsuposedれるものイムわからないが、私は正確に同じエラーを取得: newPost.price = newPost.save(機能(ERR、mpostを){ ^ 例外TypeError:newPost.saveが関数 ではありません また、モンゴースの範囲に問題があるとわかった限り(私はそれが使えます) – Dragan