gpt4 book ai didi

javascript - 使用 NodeJS 获取 API 数据并写入 MongoDB

转载 作者:行者123 更新时间:2023-12-03 04:51:03 25 4
gpt4 key购买 nike

我正在学习 NodeJS 并尝试在本地建立一个模拟网站。基本上,它是一个使用 WOW AuctionHouse API 的网站。我从请求中获取数据,将其解析为 JSON 并尝试将其写入数据库。问题是,如果我将 auctions.save 放在请求中,它不会将 .save 函数识别为函数(假设我超出了它的范围),如果我将它放在外部,则问题来自异步性质,我得到我的数据库中有一个空条目。这是代码:

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 不是一个函数
  • 尝试在请求内部调用在最外部作用域定义的函数,但这也告诉我 .save 不是函数。

最佳答案

我认为您可能需要将您的请求包装在事件监听器中。这将确保请求在服务器完成启动后运行,而不是之前。这是一个简单的示例。

app.on('listening', function () {
// Run your request to the WoW auction house once the express server has started up
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!");

})
}
});
});

关于javascript - 使用 NodeJS 获取 API 数据并写入 MongoDB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42657063/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com