我无法将 ./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/