Node.js - API 编程完全陌生
Completely new to Node.js - API Programming
我最近收到了 Node.js。在我跳转到 Express.js 和其他 Web 框架之前,我对它们了解不多,但我想尝试一些 API 编程。我下载了这个模块:https://www.npmjs.com/package/steamwebapi
因为我是 Node.js 的新手,所以我创建了新的 javascript 文件,app.js 我的代码是:
var SteamWebAPI = require('steamwebapi').SteamWebAPI;
SteamWebAPI.setAPIKey('My key is here');
SteamWebAPI.getRecentlyPlayedGames('76561198190043289', 5, function(response) {
console.log(response);
});
SteamWebAPI.getRecentlyPlayedGames('76561198190043289', 5, function(response) {
console.log(response);
});
'76561198190043289' 是我的 64 位 Steam ID。当我在终端中键入:node app.js 时,我得到:
{ response: { total_count: 1, games: [ [Object] ] } }
{ response: { total_count: 1, games: [ [Object] ] } }
如何显示我的结果,我做错了什么?
你没有做错任何事。 console.log 为了便于阅读,使输出更紧凑。它有时会变得 非常 冗长,所以这可能是一件好事。
表示“[[Object]]”实际上是一个或多个游戏的数组。您可以尝试使用
console.dir( response );
相反,或者您可以使用日志更具体:
console.log( response.response.games );
。
如果你不厌其烦地四处搜索,还有其他方法可以解决这个问题。转换为字符串似乎很流行:
console.log( JSON.stringify( response, null, 4) );
题外话...
我还想提一件事(因为你是新手)每个人都必须重新学习从 js 到 node 的一件事。像您一样调用函数:
function1(..., callback);
function2(..., callback);
节点立即移动到第二个函数,而无需等待第一个回调完成。所以你不知道这些函数中的哪一个会先完成。要强制执行此命令,您必须这样做:
SteamWebAPI.getRecentlyPlayedGames('76561198190043289', 5, function(response) {
console.log(response);
SteamWebAPI.getRecentlyPlayedGames('76561198190043289', 5, function(response) {
console.log(response);
});
});
您的代码将变成臭名昭著的回调地狱。没有避免它。它迟早会发生!为防止这种情况发生,请学习如何使用承诺。从那里开始你会好得多!
编辑:连接到 angular
您需要创建某种服务器后端。这就是使用 express 的样子(因为你提到了 express):
var express = require('express');
var server = express();
var SteamWebAPI = require('steamwebapi').SteamWebAPI;
SteamWebAPI.setAPIKey('My key is here');
// define endpoints
server.get('/games', function (req, res) {
SteamWebAPI.getRecentlyPlayedGames('76561198190043289', 5, function(response) {
res.json(response.response.games);
});
});
// Start the server
server.listen(3000, function () {
console.log('Example app listening on port 3000!');
});
一旦它是 运行,您可以通过浏览到 http://example.com:3000/games
来测试它是否有效
然后您从 angular:
调用您的端点
var app = angular.module("app", []);
app.controller("myCtrl", function($scope, $http){
$scope.games = [];
$http.get('http://example.com:3000/games').then(function(response){
// The response is seldom exactly what you expect. Check your browser console.
console.log(response);
$scope.games = response.data;
});
});
html
<body ng-app="app" ng-controller="myCtrl">
<div ng-repeat="game in games">{{ game }}</div>
</body>
全部完成。
请注意,这都是凭空而来(没有任何测试),因此难免存在错误。但它至少应该给你一个起点。
我最近收到了 Node.js。在我跳转到 Express.js 和其他 Web 框架之前,我对它们了解不多,但我想尝试一些 API 编程。我下载了这个模块:https://www.npmjs.com/package/steamwebapi
因为我是 Node.js 的新手,所以我创建了新的 javascript 文件,app.js 我的代码是:
var SteamWebAPI = require('steamwebapi').SteamWebAPI;
SteamWebAPI.setAPIKey('My key is here');
SteamWebAPI.getRecentlyPlayedGames('76561198190043289', 5, function(response) {
console.log(response);
});
SteamWebAPI.getRecentlyPlayedGames('76561198190043289', 5, function(response) {
console.log(response);
});
'76561198190043289' 是我的 64 位 Steam ID。当我在终端中键入:node app.js 时,我得到:
{ response: { total_count: 1, games: [ [Object] ] } }
{ response: { total_count: 1, games: [ [Object] ] } }
如何显示我的结果,我做错了什么?
你没有做错任何事。 console.log 为了便于阅读,使输出更紧凑。它有时会变得 非常 冗长,所以这可能是一件好事。
表示“[[Object]]”实际上是一个或多个游戏的数组。您可以尝试使用
console.dir( response );
相反,或者您可以使用日志更具体:
console.log( response.response.games );
。
如果你不厌其烦地四处搜索,还有其他方法可以解决这个问题。转换为字符串似乎很流行:
console.log( JSON.stringify( response, null, 4) );
题外话...
我还想提一件事(因为你是新手)每个人都必须重新学习从 js 到 node 的一件事。像您一样调用函数:
function1(..., callback);
function2(..., callback);
节点立即移动到第二个函数,而无需等待第一个回调完成。所以你不知道这些函数中的哪一个会先完成。要强制执行此命令,您必须这样做:
SteamWebAPI.getRecentlyPlayedGames('76561198190043289', 5, function(response) {
console.log(response);
SteamWebAPI.getRecentlyPlayedGames('76561198190043289', 5, function(response) {
console.log(response);
});
});
您的代码将变成臭名昭著的回调地狱。没有避免它。它迟早会发生!为防止这种情况发生,请学习如何使用承诺。从那里开始你会好得多!
编辑:连接到 angular
您需要创建某种服务器后端。这就是使用 express 的样子(因为你提到了 express):
var express = require('express');
var server = express();
var SteamWebAPI = require('steamwebapi').SteamWebAPI;
SteamWebAPI.setAPIKey('My key is here');
// define endpoints
server.get('/games', function (req, res) {
SteamWebAPI.getRecentlyPlayedGames('76561198190043289', 5, function(response) {
res.json(response.response.games);
});
});
// Start the server
server.listen(3000, function () {
console.log('Example app listening on port 3000!');
});
一旦它是 运行,您可以通过浏览到 http://example.com:3000/games
来测试它是否有效然后您从 angular:
调用您的端点var app = angular.module("app", []);
app.controller("myCtrl", function($scope, $http){
$scope.games = [];
$http.get('http://example.com:3000/games').then(function(response){
// The response is seldom exactly what you expect. Check your browser console.
console.log(response);
$scope.games = response.data;
});
});
html
<body ng-app="app" ng-controller="myCtrl">
<div ng-repeat="game in games">{{ game }}</div>
</body>
全部完成。
请注意,这都是凭空而来(没有任何测试),因此难免存在错误。但它至少应该给你一个起点。