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

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

ただいまの
回答率

88.64%

expressでデータが取得できません。

受付中

回答 1

投稿

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

nulll

score 11

expressでデータが取得できません。

Executing (default): SELECT "user_id", "email", "user_name", "password", "created_at" FROM "users" AS "users" WHERE "users"."user_id" = 1 ORDER BY "users"."created_at" DESC;
Unhandled rejection ReferenceError: user_id is not defined
at /home/vagrant/w/s/routes/index.js:17:11
at tryCatcher (/home/vagrant/w/s/node_modules/bluebird/js/release/util.js:16:23)
at Promise._settlePromiseFromHandler (/home/vagrant/w/s/node_modules/bluebird/js/release/promise.js:547:31)
at Promise._settlePromise (/home/vagrant/w/s/node_modules/bluebird/js/release/promise.js:604:18)
at Promise._settlePromise0 (/home/vagrant/w/s/node_modules/bluebird/js/release/promise.js:649:10)
at Promise._settlePromises (/home/vagrant/w/s/node_modules/bluebird/js/release/promise.js:729:18)
at _drainQueueStep (/home/vagrant/w/s/node_modules/bluebird/js/release/async.js:93:12)
at _drainQueue (/home/vagrant/w/s/node_modules/bluebird/js/release/async.js:86:9)
at Async._drainQueues (/home/vagrant/w/s/node_modules/bluebird/js/release/async.js:102:5)
at Immediate.Async.drainQueues [as _onImmediate] (/home/vagrant/w/s/node_modules/bluebird/js/release/async.js:15:14)
at processImmediate (internal/timers.js:439:21)

というエラーが出てしまい
dbからデータが取れません。

modelは定義しています。
dbとappの接続もできています。
user_id1のユーザーはDB上にあります。

調べてみたのですがnode.jsの方のerorrばかり出てしまい、sequelizeを使った場合の記事が確認できなかっため質問しました。

コード

route/index.js

'use strict';
const express = require('express');
const router = express.Router();
const User = require('../models/user');

/* GET home page. */
router.get('/', function(req, res, next) {
  res.render('index', { title: 'Express' }); 

  //var userdate = user.findAll({where:{user_id : 1},order: [['"created_at"', 'DESC']]});

  User.findAll({
    where:{user_id : 1},
    order: [['"created_at"', 'DESC']]
  }).then((user) => {
    res.render('user', {
      id :user_id,
      user_name : user_name,
    });
  });

});

module.exports = router;

model/user.js

'use strict';
const loader = require('./sequelize-loader');
const Sequelize = loader.Sequelize;

const User = loader.database.define('users', {
  user_id: {
    type: Sequelize.INTEGER,
    primaryKey: true,
    allowNull: false,
    autoIncrement: true
  },email: {
    type: Sequelize.STRING,
    allowNull: false
  },user_name: {
    type: Sequelize.STRING,
    allowNull: false
  },password: {
    type: Sequelize.STRING,
    allowNull: false
  },created_at: {
    type: Sequelize.DATE,
    allowNull: false
  }

},{
    freezeTableName: true,
    timestamps: false
  });

module.exports = User;

view

extends layout

block content
  h1= title
  p Welcome to #{title}

  p #{id}


app.js

var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');
var session = require('express-session');
var helmet = require('helmet');
var app = express();

var indexRouter = require('./routes/index');
var usersRouter = require('./routes/user');
var loginRouter = require('./routes/login');
var logoutRouter = require('./routes/logout');


// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'pug');

app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
app.use(helmet());

app.use('/', indexRouter);
app.use('/newuser', usersRouter);
app.use('/login',loginRouter);
app.use('/logout',logoutRouter);


// catch 404 and forward to error handler
app.use(function(req, res, next) {
  next(createError(404));
});

// error handler
app.use(function(err, req, res, next) {
  // set locals, only providing error in development
  res.locals.message = err.message;
  res.locals.error = req.app.get('env') === 'development' ? err : {};

  // render the error page
  res.status(err.status || 500);
  res.render('error');
});

module.exports = app;


//model
var User = require('./models/user');
User.sync().then(() => {

});

環境
node.js 8.16.0
express 4.16.0
postgresql 10.9
sequelize 4.33.4

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 1

0

長いエラーメッセージには戸惑うかもしれませんが、最初(言語によっては最後)の行にあるメッセージを検索にかけてみたり、at (エラー原因のファイルPATH):行:桁 という表示から エラー箇所を推測する ことができます。


ちなみに、ご提示のエラーメッセージからは、「index.js の 17行目11桁 user_id が定義されてない」とのことです。

Executing (default): SELECT "user_id", "email", "user_name", "password", "created_at" FROM "users" AS "users" WHERE "us
ers"."user_id" = 1 ORDER BY "users"."created_at" DESC;
Unhandled rejection ReferenceError: user_id is not defined
at /home/vagrant/w/s/routes/index.js:17:11


このメッセージに従うと、index.jsを見ると then( ) 内部の関数内、引数の値を参照していない & 宣言していない変数の利用の指摘と推測できます。
(おそらく、次の行も同じエラーが出そうです)

[routes/index.js]

  User.findAll({
    where:{user_id : 1},
    order: [['"created_at"', 'DESC']]
  }).then((user) => { // 渡された user のプロパティを使いたい?
    res.render('user', {
      id :user_id,           // L17:11 user.user_id ?
      user_name : user_name, // L18:19 user.user_name ?
    });
  });

列挙される at ~ から、「自分の書いたファイルを探してみる」のも対策の1つです。

エラーメッセージは英語表記ですが、意外と親切に教えてくれていますよ。

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

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

  • ただいまの回答率 88.64%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

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