简体   繁体   中英

How to get a variable defined in index.js from within a controller?

I'm testing forms-angular ( http://www.forms-angular.org/ ).

I define a DataFormHandler variable in my index.js file. And also I need to get this variable in my controllers. How may I get it? This setter doesn't work app.set("formHandler", DataFormHandler) .

Here is the code:

index.js

'use strict';

var formsAngular = require('forms-angular');  // require formsAngular

var kraken      = require('kraken-js'),
        app     = require('express')(),
        options = {
            onconfig: function (config, next) {
                //any config setup/overrides here
                next(null, config);
            }
        },
        port    = process.env.PORT || 8000;


// Here I initialize FormHandler. It requires the app, so I initialize it here, in index.js
// HOW TO GET THIS VAR IN CONTROLLERS?
var DataFormHandler = new (formsAngular)(app);
app.set("fh", DataFormHandler);  // THIS DOESN'T WORK. UNDEFINED in controller

app.use(kraken(options));


app.listen(port, function (err) {
    console.log('[%s] Listening on http://localhost:%d', app.settings.env, port);
});

The setter app.set("fh", DataFormHandler) doesn't work. When I try to get fh from within a controller it is undefined :

app\\controllers\\index.js

'use strict';

var UserModel = require('../models/user');

module.exports = function (router) {

    var user = new UserModel();

    router.get('/', function (req, res) {

        var DataFormHandler = req.app.get("fh");
        DataFormHandler.addResource('user', UserModel);

        console.log("DataFormHandler", DataFormHandler);  // undefined

        var model = {
            hello: "Hello"
        }

        res.render('index', model);
    });
};

How to get a variable in a controller?

I found one solution that works. But not sure that it's the correct one.

Instead of

app.set(key, value)

which doesn't work, I use

app.locals.key = value

that for some reason works.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM