Javascript 如何从;RESTBuilder";在Total.js平台上
受此帖子启发 我想使用total.js平台编写一个单页应用程序,从“coinmarketcap.com”api获取硬币列表,并将响应存储到数据库中。我做了以下几件事。但是我在存储接收到的信息时出错。如何将收到的json文件保存到数据库或文件系统,并在其他地方使用 1-我在“models”文件夹中编写了一个名为“coins.js”的文件,其中包含以下代码Javascript 如何从;RESTBuilder";在Total.js平台上,javascript,node.js,totals,total.js,Javascript,Node.js,Totals,Total.js,受此帖子启发 我想使用total.js平台编写一个单页应用程序,从“coinmarketcap.com”api获取硬币列表,并将响应存储到数据库中。我做了以下几件事。但是我在存储接收到的信息时出错。如何将收到的json文件保存到数据库或文件系统,并在其他地方使用 1-我在“models”文件夹中编写了一个名为“coins.js”的文件,其中包含以下代码 // For importing const Fs = require('fs'); NEWSCHEMA('UsdPrice').make(f
// For importing
const Fs = require('fs');
NEWSCHEMA('UsdPrice').make(function(schema) {
schema.define('price', Number);
schema.define('volume_24h', Number);
schema.define('percent_change_1h', Number);
schema.define('percent_change_24h', Number);
schema.define('percent_change_7d', Number);
schema.define('market_cap', Number);
schema.define('last_updated', Date);
});
NEWSCHEMA('Coin').make(function(schema) {
schema.define('id', Number);
schema.define('name', 'String(50)');
schema.define('symbol', 'String(40)');
schema.define('slug', 'String(50)');
schema.define('num_market_pairs', Number);
schema.define('date_added', Date);
schema.define('tags', '[String]');
schema.define('max_supply', Number);
schema.define('circulating_supply', Number);
schema.define('total_supply', Number);
schema.define('platform', 'String(20)');
schema.define('cmc_rank', Number);
schema.define('last_updated', Date);
schema.define('quote', '[Object]');
schema.define('USD', '[UsdPrice]');
schema.setSave(function($) {
var model = $.model;
var coin = U.extend({}, model.$clean());
// Extends model
coin.dateadded = F.datetime;
NOSQL('coins').insert(JSON.parse(JSON.stringify(coin)));
});
});
exports.install = function() {
ROUTE('/', viwe_index);
ROUTE('POST /api/coins/ *coin --> @save');
};
function viwe_index() {
var self = this;
RESTBuilder.make(function(builder) {
builder.url('https://pro-api.coinmarketcap.com/v1/cryptocurrency/listings/latest? start=1&limit=2&convert=USD');
builder.header('X-CMC_PRO_API_KEY', 'b54bcf4d-1bca-4e8e-9a24-22ff2c3d462c');
builder.accept('application/json');
builder.header('Accept-Encoding', 'gzip');
builder.GET().plain().exec(function(err, response) {
//console.log(response);
AJAX('POST /api/coins/', 'coin', function(response){
response.$save();
});
});
}, function() {
self.view('index');
});
}
@{layout('')}
<!DOCTYPE html>
<html>
<head>
<title>CryptoCompare</title>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=10" />
<meta name="format-detection" content="telephone=no"/>
<meta name="viewport" content="width=1024, user-scalable=yes" />
<meta name="robots" content="all,follow" />
<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<style type="text/css">
body { padding: 50px; margin: 0; font:normal 12px Arial; color: gray }
a { float:left; margin: 0 5px 0 0; font-size: 13px; }
p { background-color: #F0F0F0; padding: 5px; font:bold 15px Arial; }
</style>
</head>
<body>
<div>CryptoCompareTotal index</div>
</body>
</html>
2-我在“controllers”文件夹中编写了一个名为“default.js”的文件,其中包含以下代码
// For importing
const Fs = require('fs');
NEWSCHEMA('UsdPrice').make(function(schema) {
schema.define('price', Number);
schema.define('volume_24h', Number);
schema.define('percent_change_1h', Number);
schema.define('percent_change_24h', Number);
schema.define('percent_change_7d', Number);
schema.define('market_cap', Number);
schema.define('last_updated', Date);
});
NEWSCHEMA('Coin').make(function(schema) {
schema.define('id', Number);
schema.define('name', 'String(50)');
schema.define('symbol', 'String(40)');
schema.define('slug', 'String(50)');
schema.define('num_market_pairs', Number);
schema.define('date_added', Date);
schema.define('tags', '[String]');
schema.define('max_supply', Number);
schema.define('circulating_supply', Number);
schema.define('total_supply', Number);
schema.define('platform', 'String(20)');
schema.define('cmc_rank', Number);
schema.define('last_updated', Date);
schema.define('quote', '[Object]');
schema.define('USD', '[UsdPrice]');
schema.setSave(function($) {
var model = $.model;
var coin = U.extend({}, model.$clean());
// Extends model
coin.dateadded = F.datetime;
NOSQL('coins').insert(JSON.parse(JSON.stringify(coin)));
});
});
exports.install = function() {
ROUTE('/', viwe_index);
ROUTE('POST /api/coins/ *coin --> @save');
};
function viwe_index() {
var self = this;
RESTBuilder.make(function(builder) {
builder.url('https://pro-api.coinmarketcap.com/v1/cryptocurrency/listings/latest? start=1&limit=2&convert=USD');
builder.header('X-CMC_PRO_API_KEY', 'b54bcf4d-1bca-4e8e-9a24-22ff2c3d462c');
builder.accept('application/json');
builder.header('Accept-Encoding', 'gzip');
builder.GET().plain().exec(function(err, response) {
//console.log(response);
AJAX('POST /api/coins/', 'coin', function(response){
response.$save();
});
});
}, function() {
self.view('index');
});
}
@{layout('')}
<!DOCTYPE html>
<html>
<head>
<title>CryptoCompare</title>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=10" />
<meta name="format-detection" content="telephone=no"/>
<meta name="viewport" content="width=1024, user-scalable=yes" />
<meta name="robots" content="all,follow" />
<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<style type="text/css">
body { padding: 50px; margin: 0; font:normal 12px Arial; color: gray }
a { float:left; margin: 0 5px 0 0; font-size: 13px; }
p { background-color: #F0F0F0; padding: 5px; font:bold 15px Arial; }
</style>
</head>
<body>
<div>CryptoCompareTotal index</div>
</body>
</html>
3-我在“视图”文件夹中编写了一个名为“index.html”的文件,其中包含以下代码
// For importing
const Fs = require('fs');
NEWSCHEMA('UsdPrice').make(function(schema) {
schema.define('price', Number);
schema.define('volume_24h', Number);
schema.define('percent_change_1h', Number);
schema.define('percent_change_24h', Number);
schema.define('percent_change_7d', Number);
schema.define('market_cap', Number);
schema.define('last_updated', Date);
});
NEWSCHEMA('Coin').make(function(schema) {
schema.define('id', Number);
schema.define('name', 'String(50)');
schema.define('symbol', 'String(40)');
schema.define('slug', 'String(50)');
schema.define('num_market_pairs', Number);
schema.define('date_added', Date);
schema.define('tags', '[String]');
schema.define('max_supply', Number);
schema.define('circulating_supply', Number);
schema.define('total_supply', Number);
schema.define('platform', 'String(20)');
schema.define('cmc_rank', Number);
schema.define('last_updated', Date);
schema.define('quote', '[Object]');
schema.define('USD', '[UsdPrice]');
schema.setSave(function($) {
var model = $.model;
var coin = U.extend({}, model.$clean());
// Extends model
coin.dateadded = F.datetime;
NOSQL('coins').insert(JSON.parse(JSON.stringify(coin)));
});
});
exports.install = function() {
ROUTE('/', viwe_index);
ROUTE('POST /api/coins/ *coin --> @save');
};
function viwe_index() {
var self = this;
RESTBuilder.make(function(builder) {
builder.url('https://pro-api.coinmarketcap.com/v1/cryptocurrency/listings/latest? start=1&limit=2&convert=USD');
builder.header('X-CMC_PRO_API_KEY', 'b54bcf4d-1bca-4e8e-9a24-22ff2c3d462c');
builder.accept('application/json');
builder.header('Accept-Encoding', 'gzip');
builder.GET().plain().exec(function(err, response) {
//console.log(response);
AJAX('POST /api/coins/', 'coin', function(response){
response.$save();
});
});
}, function() {
self.view('index');
});
}
@{layout('')}
<!DOCTYPE html>
<html>
<head>
<title>CryptoCompare</title>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=10" />
<meta name="format-detection" content="telephone=no"/>
<meta name="viewport" content="width=1024, user-scalable=yes" />
<meta name="robots" content="all,follow" />
<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<style type="text/css">
body { padding: 50px; margin: 0; font:normal 12px Arial; color: gray }
a { float:left; margin: 0 5px 0 0; font-size: 13px; }
p { background-color: #F0F0F0; padding: 5px; font:bold 15px Arial; }
</style>
</head>
<body>
<div>CryptoCompareTotal index</div>
</body>
</html>
首先,
AJAX
是jComponent函数,所以前端库不是后端total.js库
请尝试此代码,我没有API密钥,因此无法尝试
控制器:
exports.install = function() {
ROUTE('/', view_index);
};
function view_index() {
var self = this;
RESTBuilder.make(function(builder) {
builder.url('https://pro-api.coinmarketcap.com/v1/cryptocurrency/listings/latest? start=1&limit=2&convert=USD');
builder.header('X-CMC_PRO_API_KEY', 'b54bcf4d-1bca-4e8e-9a24-22ff2c3d462c');
builder.accept('application/json');
builder.header('Accept-Encoding', 'gzip');
builder.exec(function(err, response) {
// Here you could change response to your model
var model = response;
// Save to database without callback
// For usage please read docs: https://docs.totaljs.com/latest/en.html#api~global~%24SAVE
$SAVE('Coin', model);
self.view('index');
});
});
}
架构文件的一部分:
schema.setSave(function($) {
var model = $.clean();
// Extends model
coin.dateadded = F.datetime;
NOSQL('coins').insert(model);
});
请阅读response,response.data中有对象数组 控制器
exports.install = function() {
ROUTE('/', view_index);
// or
// ROUTE('/');
};
function view_index() {
var self = this;
RESTBuilder.make(function(builder) {
builder.url('https://pro-api.coinmarketcap.com/v1/cryptocurrency/listings/latest?start=1&limit=2&convert=USD');
builder.header('X-CMC_PRO_API_KEY', '07c1f1d1-681a-467e-8558-923da4d815c2');
builder.accept('application/json');
builder.header('Accept-Encoding', 'gzip');
builder.exec(function(err, response) {
var data = response.data;
data.wait(function(item, next) {
// Schema save
$SAVE('Coin', item);
// Or save directly to NOSQL
// NOSQL('coins').insert(item);
next();
}, function() {
self.view('index');
});
});
});
}
模式
schema.setSave(function($) {
var model = $.clean();
// Extends model
model.dateadded = F.datetime;
NOSQL('coins').insert(model);
});
您的建议有效,但以空值保存。(null,“,zero)。我的数据库记录:
{“id”:0,“name”:“symbol”:“slug”:“num_-market_-pairs”:0,“date_-added”:null,“tags”:[],“max_-supply”:0,“circulation_-supply”:0,“platform”:“cmc_-rank”:0,“last_-updated”:“null”,“quote”:[],“USD”:[]}
您能用这个api密钥测试吗?”07c1f1d1-681a-467e-8558-923da4d815c2“