在Node中使用Module.exports进行继承

4

我可能太蠢了...

我正在使用node和express,我有一个使用exports来处理路由的独立文件。在它的上面,我需要通过require引用并赋值给一个变量,一个我使用npm安装的包。

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

在routes.signup中,我有:

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

我遇到了一个错误,提示passwordHash未定义。我该如何“继承”所需的调用?

4个回答

4
您还可以执行以下操作(假设此代码在app.js中定义):
module.passwordHash = require('password-hash');
app.get("/signup", routes.signup);

在路由signup文件中:

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

1

我知道这个问题很老,但是这个方法可以帮助我:使用exports!

如果我有一个名为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;

1

独立的文件具有独立的作用域,因此如果您想在其他文件中使用passwordHash,则需要在该文件中也调用require('password-hash');


1

您可以通过应用程序变量来移动您的变量,这样应该可以在任何地方访问。尝试做一些类似于这样的事情:

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

另一件你可以尝试的事情是使用全局变量,这意味着从passwordHash中移除var。不确定这是否适用于express,但值得检查。
passwordHash = require('password-hash');
app.get("/signup", routes.signup);

如果有帮助,请告诉我。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接