【发布时间】:2021-06-17 17:49:47
【问题描述】:
目前我正在从事一个个人项目,但在理解我的应用程序中 module.exports 的功能时遇到了问题...
我的应用结构如下所示:
app
├── common
│ ├── cmd
│ │ ├── run-cmd.js
├── routes
│ ├── system
│ │ ├── temp.js
我希望能够在我的应用程序的单独位置存储可重用函数(在此示例中为 run-cmd.js),并在我的应用程序的其余部分(temp.js)中轻松访问它们,而无需特别参考文件路径(例如:require(../../folder/folder/file)
这里是run-cmd.js:
const { spawn } = require("child_process");
module.exports.runCmd = (cmd, callback) => {
var command = spawn(cmd, [], {shell:true});
const REGEX_LINE_BREAK = /(\r\n|\n|\r)/gm;
var result = '';
command.stdout.on('data', function(data) {
console.log(data.toString())
result += data.toString().replace(REGEX_LINE_BREAK, "");
});
command.on('close', (code) => {
console.log("code: " + code)
return callback(result);
});
}
这里是temp.js:
var express = require('express'),
router = express.Router(),
runCmd = require('../../common/cmd/run-cmd');
// Add a binding to handle '/temp'
router
.get('/temp', (req, res) => {
runCmd('vcgencmd measure_temp', function(result) {
console.log("Result we are prepping to send: " + result);
res.json({result: result});
});
});
module.exports = router;
我觉得上面的 require() 示例破坏了使用 module.exports 的灵活性的目的......在我的应用程序中,在其他位置执行类似 require(./run-cmd) 甚至 require(from-root/path/run-cmd) 的操作会更好.此外,在这个当前示例中,我收到一条错误消息 TypeError: runCmd is not a function。
任何人都可以帮助消除我对使用 module.exports 的一些困惑并告诉我哪里出错了吗?
【问题讨论】:
-
你看过
require('path/to/runCmd')给你的东西了吗?它是一个对象,即定义的module.exports,它包含runCmd函数。对于绝对路径,您是否阅读过例如stackoverflow.com/q/21229944/3001761? -
@jonrsharpe,感谢您的回复。在上面我当前的示例中,我使用的是
require('path/to/runCmd'),如前所述,我得到的是TypeError: runCmd is not a function。 -
正确;同样,它不是一个函数,它是一个对象。注销,看看。
标签: javascript node.js module.exports