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>

全部完成。

请注意,这都是凭空而来(没有任何测试),因此难免存在错误。但它至少应该给你一个起点。