2

データベースからデータを選択して表示するために、 my から./db/index.jsmy file へのメソッドを要求していません。server.js

は次の/db/index.jsようになります。

'use strict';

const pgp = require('pg-promise')();
const pg = pgp(process.env.DATABASE_URL);

let select = () => {
    pg.any('SELECT username, status FROM status')
        .then(function(data){
            for (var item of data) {
                return item.username + "'s status is " + item.status;
            }
        })
        .catch(function(err) {
            return 'Error: ' + err.message || err;
        });
};

module.exports = () => {
    select
};

そして、別のファイルから呼び出したい:

'use strict';

const port = process.env.PORT || 3000;
const bodyParser = require('body-parser');
const express = require('express');
const app = express();
const db = require('./db/');

app.use(bodyParser.urlencoded({extended: true}));

app.post('/logdash', function(req, res, next) {
    res.status(200).send(db.select());
});

app.listen(port, function() {
    console.log('Server is running on port', port);
});

私はHerokuを使用していますが、このようにログを見ると、ターミナルとSlackの両方にエラーが表示されていません(スラッシュコマンドです)。関数を適切に分離する方法についてのヘルプが見つかりません。selectこのメソッドと別のファイルから他のメソッドを呼び出すにはどうすればよいですか?

4

3 に答える 3

2

あなたのコードには多くの問題があり、そのうちのいくつかは @jfriend00 による以前の回答にリストされています。

メソッドが成功した場合、メソッドからデータを返さないことだけを追加します。

エラーを繰り返すのではなく、そこにいくつのエラーが発生したかを考慮して、代わりに修正されたコード例を示します。

データベース モジュール:

'use strict';

const pgp = require('pg-promise')();
const db = pgp(process.env.DATABASE_URL);

let select = (req, res, next) =>
    db.map('SELECT username, status FROM status', null, row=> {
        return row.username + "'s status is " + row.status;
    })
        .then(data=> {
            res.status(200).send(data);
        })
        .catch(err=> {
            res.status(500).send(err.message || err);
        });

module.exports = {
    select
};

HTTP サービス ファイル:

'use strict';

const port = process.env.PORT || 3000;
const bodyParser = require('body-parser');
const express = require('express');
const app = express();
const db = require('./db/');

app.use(bodyParser.urlencoded({extended: true}));

app.post('/logdash', db.select);

app.listen(port, function () {
    console.log('Server is running on port', port);
});

コードはpg-promise v.4.3.xに基づいています (古いバージョンがある場合はアップグレードしてください)。

コードを整理するための良いアプローチとは言えませんが、少なくとも実用的な例です。pg-promise-demoで完全なアプリケーションの例を確認できます。これにより、データベース コードを整理する方法をよりよく理解することができます。


API リファレンス:マップ


于 2016-05-26T01:50:48.290 に答える
0

いくつかのこと。あなたのselect関数がPromiseを返すことを確認します。私はあなたのルートの約束も処理します。このようにして、適切なステータス コードと応答を適切に送信できます。

db/index.js

'use strict';

const pgp = require('pg-promise')();
const pg = pgp(process.env.DATABASE_URL);

let select = () => {
  return pg.any('SELECT username, status FROM status')
}

module.exports = () => {
    select
};

server.js

'use strict';

const port = process.env.PORT || 3000;
const bodyParser = require('body-parser');
const express = require('express');
const app = express();
const db = require('./db/');

app.use(bodyParser.urlencoded({extended: true}));

app.post('/logdash', function(req, res, next) {
    db.select()
        .then((data) => {
          res.status(200).json(data)
        })
        .catch((error) => {
          res.status(500).json(error)
        })
});

app.listen(port, function() {
    console.log('Server is running on port', port);
});

私はこれをテストしませんでしたが、うまくいくはずです。

于 2016-05-26T02:29:16.223 に答える