通过节点中的Module.exports继承

时间:2012-02-06 04:11:32

标签: javascript node.js express

这可能是我愚蠢......

我正在使用带有express的节点,我有一个单独的文件,使用导出路由。在它上面,我需要并转换为变量,我使用npm安装的包。

var passwordHash = require('password-hash');
app.get("/signup", routes.signup);

在routes.signup里面,我有:

passwordHash.generate(req.form.username, {algorithm: 'sha512'})

并且它抛出一个错误,说密码哈希是未定义的。我怎样才能“继承”所说的要求电话?

4 个答案:

答案 0 :(得分:4)

您还可以执行以下操作(比如此代码在app.js中定义):

module.passwordHash = require('password-hash');
app.get("/signup", routes.signup);

在routes.signup中:

var passwordHash = module.parent.passwordHash; // from app.js
passwordHash.generate(req.form.username, {algorithm: 'sha512'});

答案 1 :(得分:1)

单独的文件有不同的范围,因此如果您想在其他文件中使用passwordHash,那么您也需要在该文件中调用require('password-hash');

答案 2 :(得分:1)

您可以通过app变量移动变量,该变量应该随处可访问。尝试做类似的事情:

app.passwordHash = require('password-hash');
app.get("/signup", routes.signup);

您可能尝试的另一件事是使用全局变量,这意味着从passwordHash中删除var。不确定这是否适用于快递,但值得检查。

passwordHash = require('password-hash');
app.get("/signup", routes.signup);

如果有帮助,请告诉我。

答案 3 :(得分:0)

我知道这个问题已经过时了,但这对我有帮助:使用出口!

所以如果我有一个名为Index.js的文件:

var model = require("./Model");

function test()
{
    model.setMyVar("blah");
    console.log(model.myVar);
}

我的Model.js看起来像这样:

var myVar;
exports.myVar = myVar;

function setMyVar(value)
{
    this.myVar = value;
}
exports.setMyVar = setMyVar;