1

Swagger と Node.js を使用して、GET を呼び出したときに「Hello」を出力する単純な Hello World アプリケーションを作成しようとしていますが、次のエラーが表示されます: TypeError: res.json is not a function。Swagger Editor を使用して、次の yaml API を作成しました。

---
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: {}

swagger エディターを使用して node.js サーバーを生成し、hello_world.js コントローラーを作成しました。http://localhost:8081/hello?name=victoryを呼び出して Swagger UI を使用してコードをテストしようとすると、次のエラーが表示されます: TypeError: res.json は関数ではありません。ここに私のnode.jsコードがあります:

'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
}

私は Swagger と Node.js を初めて使用するので、エラーが発生する理由やトラブルシューティングの最善の方法がわかりません。あなたが私に与えることができる助けをいただければ幸いです。

更新: res.end(greeting) が機能することがわかりました。res.json と res.send がそうでない理由を誰でも説明できますか?

4

2 に答える 2

4

関数は express.js によって応答オブジェクトに追加されjsonますが、swagger ジェネレーターは、(express ではなく) connect.js を使用するコードを生成します。

Express は connect の上に構築されており、express の機能が必要な場合は、swagger ジェネレーターによって生成されたコードの connect の代わりに簡単に express を使用できます。index.jsと書かれている行を見つけて、const app = require('connect')();'connect' を 'express' に置き換えます。

于 2016-06-06T11:45:53.040 に答える