質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.53%

  • Node.js

    2297questions

    Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

node.jsのexpressでAPIサーバを作りたい

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 199

lightfull

score 2

Qiitaの記事を書いた人に質問すれば良いのかもしれませんが、記事が書かれてから時間が経っているので、ここで質問させてください。

Expressを用いた簡単なAPIの作り方
https://qiita.com/yujiro0102/items/a973a0ae05a794d24eb5

上記サイトを見ながら、全く同じものを作ってみたのですが、
ブラウザで
http://localhost:3000/get-example
を表示すると、以下のエラーが表示されます。

TypeError: Cannot read property 'json' of undefined
    at Object.exports.get_example (/Users/atom/dev/sample/express-node-example/express-exports.js:13:6)
    at /Users/atom/dev/sample/express-node-example/express-example.js:19:15
    at Layer.handle [as handle_request] (/Users/atom/dev/sample/express-node-example/node_modules/express/lib/router/layer.js:95:5)
    at next (/Users/atom/dev/sample/express-node-example/node_modules/express/lib/router/route.js:137:13)
    at Route.dispatch (/Users/atom/dev/sample/express-node-example/node_modules/express/lib/router/route.js:112:3)
    at Layer.handle [as handle_request] (/Users/atom/dev/sample/express-node-example/node_modules/express/lib/router/layer.js:95:5)
    at /Users/atom/dev/sample/express-node-example/node_modules/express/lib/router/index.js:281:22
    at Function.process_params (/Users/atom/dev/sample/express-node-example/node_modules/express/lib/router/index.js:335:12)
    at next (/Users/atom/dev/sample/express-node-example/node_modules/express/lib/router/index.js:275:10)
    at jsonParser (/Users/atom/dev/sample/express-node-example/node_modules/body-parser/lib/types/json.js:110:7)

記事の中でnodeの起動が、

node stripe-express.js


と書かれているのは、

node express-example.js


の誤りかと思って、起動しています。

実施した手順(サイトの記載のまま)

ここではexpress-node-exampleとします。
$ mkdir express-node-example
ディレクトリへ移動しましょう。
$ cd express-node-example
node.jsを用いるためにnpmをinitします。
$ npm init
Expressをインストールします。
$ npm install express --save

ソース(サイトのコードを丸コピー)

express-example.js

//expressを使用するのでその設定
const express = require('express');
const bodyParser = require('body-parser');
const app = express();
//処理を記述した外部ファイルを参照
var export_func = require("./express-exports");

// urlencodedとjsonは別々に初期化
app.use(bodyParser.urlencoded({
  extended: true
}));
app.use(bodyParser.json());
//listenします。カッコ内の数字を変更することで解放するポート番号を変更できます。
app.listen(3000);
//確認のためコンソールに出力します。
console.log('Server is online.');
//app.getでGETすることができます。最初の引数を変更することでURLが変更できます。二つ目が実行内容です。
app.get('/get-example', function(req, res) {
  export_func.get_example();
})
//app.getでPOSTすることができます。最初の引数を変更することでURLが変更できます。二つ目が実行内容です。
app.post('/post-example', function(req, res) {
  export_func.post_example(req.id, req.name);
})

package-lock.jsonは、長すぎてはれませんでした。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • dice142

    2019/01/07 11:11

    「全く同じもの」とありますが、誤字脱字があるなどのミスが原因であることが多いです。
    参考元の記事ではなく質問者様が書かれたコードがないとこちらは判断できないのでコードの提示をお願いします。

    キャンセル

回答 1

checkベストアンサー

+1

参考にされている記事に不備があるようですね。
(指摘する前に参考元の記事を確認しておくべきでした。すみません。)

記事の中でnodeの起動が、
node stripe-express.js
と書かれているのは、
node express-example.js
の誤りかと思って、起動しています。

記事の誤りのようですので質問者様の起動方法で問題ないです。


問題の部分ですが、express-example.jsで下記の呼び出しを行っています。

app.get('/get-example', function(req, res) {
  export_func.get_example();
})

で、express-exports.jsで関数の実装がされています。

exports.get_example=function(res, req, next){
   res.json(json_example);
}

関数の引数にresreqnextがありますが、呼び出しでは引数が設定されていません。
元記事のコメントで指摘されているので、取り急ぎ確認せず修正したというところでしょうか。

呼び出しのところ(express-example.js)を以下のように直すと実行できます。

app.get('/get-example', function(req, res) {
  export_func.get_example(res);
})

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/01/07 12:11

    無事に動きましたー!!
    基本がわかってないので、全然想像つかなくて困っていました。
    ありがとうございました!

    キャンセル

同じタグがついた質問を見る

  • Node.js

    2297questions

    Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。