【问题标题】:how to return a value from express middleware as a separate module如何从 express 中间件返回一个值作为一个单独的模块
【发布时间】:2014-12-18 17:43:56
【问题描述】:

我已将服务器设置脚本放入名为server.js 的单独js 文件中。我的问题是我不知道如何从 express 中间件函数中获取 cookie_key 的值并将其传递回 index.js 文件。

server.js:

var express = require('express'), 
app = express(), 
http = require('http').createServer(app),
cookie = cookieParser = require('cookie-parser'),
url = require('url');

module.exports = {

 use_app : function(){
  app.use(function (req, res, next) {
  var cacheTime = 86400000*7; // 7 days
  if (!res.getHeader('Cache-Control')) 
   res.setHeader('Cache-Control', 'public, max-age=' + (cacheTime / 1000));
   next();
  }); 
 },

 get_app : function(callback){
  app.use(cookieParser());
  app.get('/id/:tagId', function(req, res){ // parse the url parameter to get the file name
   function getkey(err,data){ // get users' session cookie
    var cookie_key;
    if(err)
    {
      callback(err);
    }
    cookie_key = req.cookies["session"];
    callback(cookie_key);
   }
   var filename = req.param("tagId");
   res.sendFile(filename+'.html');
  });
 }

}

index.js:

var server = require('./server'),
server.use_app();
server.get_app(); // how to get the cookie_key when calling this function?
console.log(show_cookie_key_from the module); 
if(cookie_key !== undefined)
{
   // do something
}

我尝试编写一个回调函数来获取 cookie 密钥,但我认为它不起作用。

【问题讨论】:

  • 为什么需要传回index.js?你希望用它做什么?我觉得您正在以一种非常糟糕的方式拆分您的应用程序。

标签: javascript node.js asynchronous express


【解决方案1】:

更新 A.B 的回答:

var server = require('./server');
server.use_app();
server.get_app(function(cookie){
  if(cookie !== undefined)
  {
    // do something
  }
}); 

但我仍然认为这个设置有些奇怪,你到底想通过这样拆分应用来完成什么?

【讨论】:

  • 我只是想将基本设置(http、express、url、数据库配置)拆分到一个单独的文件中,这样我就可以在不同的项目中重复使用它们。事情似乎变得复杂了。
  • @timothy 你可以编辑我的答案,它提供了更新选项:)
  • 您打算如何在这种情况下使用 cookie?对/id/:tagId 的每个请求都会调用该回调。我试图找出真正的问题,而不是仅仅为您提供一些解决眼前问题的方法,这可能会让您在未来遇到更多麻烦。
  • 我一直在学习如何让聊天室在 socket.io 上运行。 cookie 是一个 php 会话密钥。我正在使用 redis 在聊天室和我的 php 站点之间共享数据。将获取会话密钥,以便人们可以自动登录。
  • 你实际上是在运行单独的node.js和php网站,还是node.js只是用于websocket通信?
【解决方案2】:

由于您使用的是回调函数并且正在填充 cookie 值,因此您可以获得如下所示:

var server = require('./server');
server.use_app();
 server.get_app(function(cookie){
cookie_key= cookie
if(cookie_key !== undefined)
{
   // do something
}
}); 

【讨论】:

  • 这并不像你认为的那样。您在调用回调之前检查 cookie 的值。您必须检查回调中 cookie 的值。
  • @TimothyStrimple,是的,我收到了 undefined 的建议错误。
  • @TimothyStrimple 编辑见。我让他知道我做错了什么
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-24
  • 2019-09-04
  • 2020-07-06
  • 1970-01-01
  • 1970-01-01
  • 2019-01-26
相关资源
最近更新 更多