首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >每个人都不在4号特快列车上工作

每个人都不在4号特快列车上工作
EN

Stack Overflow用户
提问于 2015-07-25 15:50:22
回答 1查看 98关注 0票数 0

我使用nodejs、express 4和everyauth进行社交网络身份验证。我遇到了一些问题,我从Google点击Accept,然后重定向回我的/

_http_outgoing.js:335 抛出新错误(“发送后不能设置标头。”);

我也使用electrolyte作为DI,但我不认为这会是一个问题。这是我的密码

index.js

代码语言:javascript
复制
var express = require('express'),
    http = require('http'),
    bootable = require('bootable');

var app = bootable(express());

app.phase(bootable.initializers('etc/init', app));

app.phase(bootable.routes(__dirname + '/routes.js', app));

app.phase(function listen(done) {
    http.createServer(app).listen(process.env.PORT || 3000, function(err) {
        if (err) { return done(err); }

        var addr = this.address();
        console.log('server listening on http://' + addr.address + ':' + addr.port);
        done();
    });
});

module.exports = app;

routes.js

代码语言:javascript
复制
var IoC = require('electrolyte');

module.exports = function routes() {

    this.get('/', IoC.create('handlers/homepage'));
    this.get('/api/foursquare', IoC.create('handlers/api/foursquare')); 
    //this.get('/auth/google/callback', IoC.create('handlers/auth/google_auth_callback'));
}

处理程序/主页

代码语言:javascript
复制
exports = module.exports = function() {
    function render(req, res, next) {
        res.render('index');    
    };

    return [render];
};

google.js

代码语言:javascript
复制
var everyauth = require('everyauth'),
    GoogleUser = require('../../app/models/google_user'),
    mongoose = require('../../app/db/mongo');

require('dotenv').load();

module.exports = function() {

    everyauth.google
        .appId(process.env.GOOGLE_CLIENT_ID)
        .appSecret(process.env.GOOGLE_CLIENT_SECRET)
        .scope('https://www.googleapis.com/auth/plus.login') // What you want access to
        .handleAuthCallbackError( function (req, res) {
            // If a user denies your app, Google will redirect the user to
            // /auth/facebook/callback?error=access_denied
            // This configurable route handler defines how you want to respond to
            // that.
            // If you do not configure this, everyauth renders a default fallback
            // view notifying the user that their authentication failed and why.
        })
    .findOrCreateUser( function (session, accessToken, accessTokenExtra, googleUserMetadata) {
        console.log('come back from google');
        console.log(session);
        // find or create user logic goes here
        // Return a user or Promise that promises a user
        // Promises are created via
        //     var promise = this.Promise();
        /*
        var googleUser = new GoogleUser(mongoose);
        var johndoe = new googleUser({
            accessToken: 'accessToken',
            expires: new Date(),
            refreshToken: 'refreshToken',
            email: 'john@doe.com',
            createdAt: new Date()
        });

        var promise = this.Promise();
        promise.resolve(johndoe);

        return promise;
        */
    }).redirectPath('/');
};

mongo.js

代码语言:javascript
复制
var mongoose = require('mongoose')

require('dotenv').load();

var uristring = process.env.MONGOLAB_URI;
mongoose.connect(uristring, function (err, res) {
    if (err) { 
        console.log ('ERROR connecting to: ' + uristring + '. ' + err);
    } else {
        console.log ('Succeeded connected to: ' + uristring);
    }
});

exports = module.exports = mongoose 
EN

回答 1

Stack Overflow用户

发布于 2015-07-25 17:02:28

如果您的代码是这样的,您将得到Can't set headers after they are sent.

代码语言:javascript
复制
  if (err) {
    res.send(err);
  }
  else if(!user) {
    res.send(info);
  }
  res.send(user);

在上面的代码中,如果user是未定义的,它会将info作为响应发送,然后再次返回到下一个语句,即res.send(user);。因此,它不能为已经发送的响应设置标题。

你可以通过

代码语言:javascript
复制
if (err) {
    res.send(err);
  }
  else if(!user) {
    res.send(info);
  }
  else {
    res.send(user);
  }

代码语言:javascript
复制
if (err) {
    return res.send(err);
  }
  else if(!user) {
    return res.send(info);
  }

  return res.send(user);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31628302

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档