简体   繁体   English

如何从文件中导出字符串,并在导出的NODE.js文件中将require()导出到另一个文件中?

[英]How can I export a string from a file and require() the exported string on another file in NODE.js?

My directory structure is like this: 我的目录结构是这样的:

collegesapp
├── node_modules
│   ├── express
│   ├── connect
│   ├── jade
│   └── passport
├── routes
│   └── routes.js
├── views
│   ├── index.jade
│   └── signin.jade
├── app.js
└── package.json
exports.serialized_user = serialized_user; //in app.js file *The variable serialized_user returns "Alex"

var serialized_user = require('../app.js').serialized_user; //in routes.js file

So, when I add console.log(typeof(serialized_user)) to my routes.js file and run the application, I end up seeing undefined in the console instead of "string" and when I add console.log(serialized_user) to my routes.js file and run the application, I end up seeing nothing in console instead of "Alex" . 因此,当我将console.log(typeof(serialized_user))到我的routes.js文件并运行该应用程序时,我最终在控制台中看到的是undefined而不是"string"并且当我将console.log(serialized_user)添加到我的routes.js文件运行该应用程序,最终在控制台中没有看到任何内容,而不是"Alex"

What do you think is my problem? 您认为我的问题是什么? Thank you in advance :) 先感谢您 :)

Here is my entire app : 这是我的整个应用程序:

//app.js file //app.js文件

var express = require('express'); var express = require('express');

var connect = require('connect');
var passport = require('passport');
var localStrategy = require('passport-local').Strategy;
var mongoose = require('mongoose');
var mongodb = require('mongodb');
var bodyParser = require('body-parser');
var methodOverride = require('method-override');;
var serveStatic = require('serve-static');
var errorHandler = require('errorhandler');
var routes = require('./routes/routes.js');
var user_model = require('./models/user_model.js');
var app = express();

//configuration
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: false}));
app.use(methodOverride());
app.use(express.Router());
app.use(serveStatic(__dirname + '/public_assets'));
app.use(passport.initialize());
app.use(passport.session());

if('development' == app.get('env')){
    app.use(errorHandler({dumpExceptions:true,showStack:true}));
}
if('production' == app.get('env')){
    app.use(errorHandler());
}

//user authentication on sign in
passport.use('signin_local_strategy', new localStrategy(
    function(username,password,done){
        user_model.findOne({username: username}, function(err, user){
            if(err)
                {
                    return(done(err));
                }
            if(!user)
                {
                    return(done(null,false));
                }
            if(user.password != password)
                {
                    return(done(null,false));
                }

            return(done(null,user));
        });
    }
));
var serialized_username;
passport.serializeUser(function(user, done){
    done(null, user.id);
    serialized_user = user.username;
    console.log(serialized_user);   //<<--- returns "Alex"
    console.log(typeof(serialized_user)); //<<--- returns string
});

exports.serialized_user = serialized_user;

passport.deserializeUser(function(done,user){
    user_model.findById(function(id, err){
        done(err,user);
    })
});


//routes
app.get('/', routes.indexResponseHandler);
app.get('/signin', routes.signinResponseHandler);
app.get('/signup', routes.signupResponseHandler);
app.get('/profile', routes.userProfileResponseHandler);
app.get('/failure', routes.signinErrorResponseHandler);
app.post('/signin',
    passport.authenticate('signin_local_strategy', { successRedirect:'/profile', 
                                                     failureRedirect: '/failure'})
    );
app.get('/db', routes.dbQuery);

app.listen(3000);

//routes.js //routes.js

var user_model = require('../models/user_model.js');

var serialized_user = require('../app.js').serialized_user;


exports.indexResponseHandler = function (req, res){
    res.render('index', {title: "College Clubs MN"});
}

exports.signinResponseHandler = function (req, res){
    res.render('signin', {title:"College Clubs MN | Sign in"});
}

exports.signupResponseHandler = function(req, res){
    res.render('signup', {title: "College Clubs MN | Sign Up"});
}

exports.userProfileResponseHandler = function(req, res){
    console.log(typeof((serialized_user))); //logs undefined but was supposed to logstring 
    res.send(typeof((serialized_user))); //<<-- shows undefined but was supposed to return string 
}

exports.signinErrorResponseHandler = function(req, res){
    res.send("Faild to Sign in ! :(");
}

//user_models.js //user_models.js

var mongoose = require('mongoose');

var schema = mongoose.Schema;

mongoose.connect(--);//connected to db 

var userSchema = new schema({
    username : String,
    password : String,
    hometown : String,
    age : Number
}, {collection : 'user'});

var user_model = mongoose.model('user', userSchema);

module.exports = user_model;

In app.js: 在app.js中:

module.exports = {
    'serialized_user': serialized_user
};

and access it with 并使用

var serialized_user = require('../app.js')
console.log(serialized_user.serialized_user):

And maybe have a look at this: http://www.sitepoint.com/understanding-module-exports-exports-node-js/ 也许看看这个: http : //www.sitepoint.com/understanding-module-exports-exports-node-js/

@clto, @clto,

//app.js //app.js

Now I added a console.log(serialized_user) to the function of the first parameter of passport's serializeUser method. 现在,我将console.log(serialized_user)添加到了护照的serializeUser方法的第一个参数的函数中。

This looks like following and the console says the string "Alex": 如下所示,控制台显示字符串“ Alex”:

var serialized_username;
passport.serializeUser(function(user, done){
    done(null, user.id);
    serialized_user = user.username;
    console.log(serialized_user);   //<<--- returns "Alex"
    console.log(typeof(serialized_user)); //<<--- returns string
});

And then I added a console.log(serialized_user) outside of passport.serializeUser(...), which is the last line of the following code and it returns undefined. 然后,我在password.serializeUser(...)之外添加了console.log(serialized_user),这是以下代码的最后一行,它返回undefined。

var serialized_username;
passport.serializeUser(function(user, done){
    done(null, user.id);
    serialized_user = user.username;
    console.log(serialized_user);   //<<--- returns "Alex"
    console.log(typeof(serialized_user)); //<<--- returns string
});
console.log((serialized_user)); //<<--- returns undefined 

Does this error have something to do with Node's way of execution(synchronous and asynchronous), maybe? 这个错误是否与Node的执行方式(同步和异步)有关?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 如何从一个文件导出变量,并在另一个文件上require()导出的变量? - How can I export a variable from one file and require() the exported variable on another file? 为什么我不能在Node.js中将另一个文件中的导出变量设置为另一个文件? - Why can't I set an exported variable in one file from another in Node.js? 如何将函数从一个文件导出到另一个 node.js? - how to export a function from one file to another node.js? 使用Browserify / Babel / node.js是否可以要求基于可变字符串的文件 - Using Browserify/Babel/node.js can you require a file based on a variable string 文档未在 node.js 上定义 - 如何将另一个 .js 文件中的变量导入 node.js 服务器? - Document is not defined on node.js - How can i import a variable from another .js file to node.js server? 将数组导出到 Node.js 中的另一个文件 - Export array to another file in Node.js 如何将变量从 javascript 文件传输到 node.js 中的另一个 html 文件? - How can I transfer a variable from a javascript file to another html file in node.js? 如何将get函数中的数据从node.js中的同一个js文件中的另一个函数中获取? - How can I get data from a get function to another function in the same js file in node.js? node.js:访问其他文件导出的函数 - node.js: access exported function from other file 如何从一个索引文件中导出 node.js 中的所有模块、函数等? - How do i export all modules, functions, etc in node.js from one index file?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM