Ich habe eine REST API eingerichtet mit Koa und Koa-Router. Ich kann einen API-Endpunkt und console.log(ctx.body)
treffen und ich sehe was ich will und erwarte zu sehen. In diesem Fall erwarte ich, dass mit einer URL ein JSON-Objekt zu sehen, und das ist, was ich auf der Knotenseite zu sehen, wenn ich es tröste out:Wie sende ich eine GET-Antwort von REST api an einen Reactive-Client mit Koa2 und koa-router?
etrade_api: { oauth_token: 'hidden',
oauth_token_secret: 'hidden',
authorizeUrl: 'https://us.etrade.com/e/t/etws/authorize?key=hidden&token=hidden' }
aber wenn ich versuche, den Endpunkt in verbrauchen Reagieren die Antwort, die ich bin auf dem Client immer ein Response-Objekt, das wie folgt aussieht:
Response {url: "http://localhost:3000/api/verification", status: 200, statusText: "OK", headers: Headers, ok: true…}
_abort:false
_raw:Array[0]
body:PassThrough
bodyUsed:false
headers:Headers
ok:true
size:0
status:200
statusText:"OK"
timeout:0
url:"http://localhost:3000/api/verification"
__proto__:Body
Meine Frage ist, wie kann ich das jSON-Objekt bekomme ich in meinem Knoten console.log auf dem Client oben erwartet?
Ich bin sehr neu in koa und habe versucht, es zu lernen, indem ich den Beispielen anderer Leute folge, wie sie ihre Ruhepis einstellen. Derzeit ist mein Server sieht wie folgt aus:
import Koa from 'koa';
import convert from 'koa-convert';
import historyApiFallback from 'koa-connect-history-api-fallback';
import serve from 'koa-static';
import body from 'koa-better-body';
import error from 'koa-error';
import compress from 'koa-compress';
import session from 'koa-session';
import responseTime from 'koa-response-time';
import logger from 'koa-logger';
import config from '../settings/config';
import routes from './api/router/routes';
const paths = config.utils_paths;
const app = new Koa();
app.keys = ['somethin up in here'];
app.use(responseTime());
app.use(error());
app.use(logger());
app.use(convert(session(app)));
// Setup api routes
app.use(body());
routes(app);
// This rewrites all routes requests to the root /index.html file
// (ignoring file requests). If you want to implement isomorphic
// rendering, you'll want to remove this middleware.
app.use(convert(historyApiFallback({
verbose: false
})));
app.use(convert(serve(paths.client('static'))));
app.use(compress());
app.listen(3000);
Und meine Routen-Datei sieht wie folgt aus:
import Router from 'koa-router';
import account_routes from '../accounts'; //import controllers
export default function (app) {
const router = new Router({
prefix: '/api'
});
account_routes(router);
app.use(router.routes());
app.use(router.allowedMethods());
}
Schließlich mein Controller sieht wie folgt aus:
import etApi from '../etrade_api';
export default function(router){
router.get('/verification', getEtradeVerificationLink);
// other routes here
}
async function getEtradeVerificationLink(ctx, next) {
const myKey = 'hidden';
const mySecret = 'hidden';
try {
ctx.body = await etApi.requestToken(myKey, mySecret);
console.log('etrade_api:', ctx.body); // this prints out what I expect to see
}
catch (error) {
console.error('Failed to get verification link.', error);
}
}
Vielen Dank für eine Aufnahme sieh dir das an und hilf ihm, dir zu helfen.
Haben Sie 'cur -i http: // localhost: 3000/api/verification' von der Befehlszeile aus versucht? Auf diese Weise können Sie bestätigen, dass Ihr Server die Ursache des Fehlers ist. – pe8ter
Niemals zuvor Curl verwendet, aber es installiert und den Befehl angewendet. Sieht aus wie die API funktioniert. Ich habe die Header und ein Objekt mit den Schlüsseln und Daten, die ich erwartet hatte, zurückbekommen. Überschriften zeigen: HTTP/1.1 200 OK Content-Type: application/json; charset = utf-8 X-Response-Time: 306ms Content-Length: 280 Datum: Anschluss heute : keep-alive {hier mein erwartetes Objekt} – Zigrivers
wie Koa-Sounds ist dann eher das nicht das Problem, clientseitiger Code, der die API aufruft – pe8ter