javascript - 使用 Node.js 从其他文件调用方法

标签 javascript node.js heroku pg-promise

我无法将 ./db/index.js 中的方法要求到 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 方法以及任何其他方法?

最佳答案

您的代码中有很多问题,其中一些问题已在 @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引用:map


关于javascript - 使用 Node.js 从其他文件调用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37449602/

相关文章:

javascript - id.style.display 不工作

node.js - 使用 Heroku Postgres 托管的数据库是否持久?

javascript - HighCharts:如何在样条图中显示 yAxis 标签的唯一文本

javascript - 如何使用 gulp 编译将其他 .scss 导入一个主 css 文件的 .scss 文件

javascript - 在不同的js文件中获取jquery插件实例?

django - Heroku Django,模板不存在错误

javascript - 错误: Cannot find module 'mkdirp' when pushing nodejs application onto heroku

javascript - Node.js 中的 JavaScript/ECMAScript 数组是 "sparse"吗?

javascript - Nodejs - 转换数组

Node.js 9 和 npm 5.5.1 : cannot run install correctly anymore