2016-04-04 9 views
1

Ich versuche, eine einfache Hallo Welt Anwendung mit Swagger und Node.js, die "Hallo" ausgibt, wenn ich GET aufrufen, aber ich bekomme den Fehler: TypeError: res.json ist keine Funktion. Unter Verwendung des Swagger-Editor erstellt ich folgende yaml api:Node.js TypeError: res.json ist keine Funktion

--- 
swagger: "2.0" 
info: 
version: "1.0.0" 
title: "Hello World" 
paths: 
/hello: 
get: 
    x-swagger-router-controller: "hello_world" 
    description: "Returns 'Hello' to the caller" 
    operationId: "hello" 
    parameters: 
    - name: "name" 
    in: "query" 
    description: "The name of the person to whom to say hello" 
    required: false 
    type: "string" 
    responses: 
    200: 
     description: "Returns greeting" 
     schema: 
     type: "string" 
     title: "HelloWorldResponse" 
    400: 
     description: "Invalid characters in \"user\" were provided" 
definitions: {} 

ich die Prahlerei Editor verwendet, um einen node.js Server zu erzeugen und einen hello_world.js Controller erstellt. Wenn ich versuche, den Code mithilfe der Swagger-Benutzeroberfläche zu testen, indem ich http://localhost:8081/hello?name=victory aufruft, sehe ich den Fehler: TypeError: res.json ist keine Funktion. Hier ist mein node.js Code:

'use strict'; 

var util = require('util'); 

module.exports = { 
hello: hello 
}; 

function hello(req, res) { 
// variables defined in the Swagger document can be referenced using req.swagger.params.{parameter_name} 
var name = req.swagger.params.name.value || 'stranger'; 
var greeting = util.format('Hello, %s!', name); 
// this sends back a JSON response which is a single string 
res.json(greeting); //ERRORS OUT HERE 
} 

Ich bin neu in Swagger und Node.js so bin ich nicht sicher, warum ich erhalte eine Fehlermeldung oder den besten Weg zur Behebung von Fehlern, es zu gehen. Jede Hilfe, die Sie mir geben können, wäre willkommen.

UPDATE: Es stellt sich heraus, dass res.end (Begrüßung) funktioniert. Kann jemand erklären, warum res.json und res.send nicht tun?

+0

Ist 'res.send' ok? –

+0

Ich bekomme TypeError: res.send ist keine Funktion, wenn ich res.json (Gruß) ändere; res.send (Begrüßung); – jencoston

+0

können Sie zeigen, wie Sie den 'hallo' Controller verwenden? –

Antwort

4

Die Funktion json wird dem Antwortobjekt von express.js hinzugefügt, aber der swagger-Generator generiert Code, der connect.js (nicht express) verwendet.

Express ist auf der Oberseite der Verbindung gebaut, und wenn Sie Funktionen von Express wollen, können Sie einfach Express anstelle von Verbindung in den Code von der Swagger-Generator generiert verwenden. Suchen Sie nach der Zeile index.js, in der const app = require('connect')(); steht, und ersetzen Sie "connect" durch "express".

+0

Ich fand die Dokumentation für den Nodejs-Server von Swagger Stub elend. Es wird hauptsächlich benötigt, weil JS-Funktionen scheußlich sind, um herauszufinden, dass ihre Signatur nicht klar ist, wenn man sich nur den Code anschaut, und es ist noch schwieriger, den Code anhand von Tags zu verfolgen. Ich denke, wir könnten alle mehr Dokumentation für das verwenden, was der Prahlerei-Code benutzt, damit wir die richtige Schätzung machen können. Das heißt, Ihre Antwort ist sehr hilfreich. – Sonny

Verwandte Themen