You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js服务器持续加载无响应问题求助(附代码)

问题排查与修复方案

核心问题分析

服务器无控制台输出且持续加载,主要是中间件使用错误导致请求处理阻塞,同时存在几处逻辑缺陷。

具体修复步骤

  • CORS中间件初始化错误
    原代码中app.use(cors);未调用cors()函数,直接传递函数本身会导致Express无法正确执行中间件,请求被卡住。修正为:

    app.use(cors());
    
  • 缺失Passport Session中间件
    使用serializeUser和deserializeUser时,必须添加passport.session()来维护用户会话,否则Passport无法处理认证后的会话持久化。在passport.initialize()后添加:

    app.use(passport.session());
    
  • 响应逻辑冲突
    /twitter/return路由中,res.send()会结束HTTP响应,后续res.redirect()无法执行。可以合并逻辑,通过客户端脚本完成消息发送和跳转:

    res.send('<script>window.opener.postMessage("authenticated", "*"); window.opener.location.href = "http://localhost:4200/home"; window.close();</script>');
    

修复后的完整代码

var express = require('express');
const cors = require('cors');
var session = require('express-session');
var passport = require('passport');
var logger = require('morgan');
const { Strategy } = require('passport-twitter').Strategy;

var app = express();

// Configure sessions and passport
app.use(cors());
app.use(logger('dev'));
app.use(session({ secret: "secret", resave: true, saveUninitialized: true }));
app.use(passport.initialize());
app.use(passport.session()); // 添加这行

passport.use(new Strategy({
    consumerKey: "your-consumer-key",
    consumerSecret: "your-consumer-secret",
    callbackURL: 'http://localhost:3000/twitter/return'

}, function (token, tokenSecret, profile, callback) {
    return callback(null, profile);
}));

passport.serializeUser(function (user, callback) {
    callback(null, user);
})

passport.deserializeUser(function (obj, callback) {
    callback(null, obj);
})

app.get('/sign-in', (req, res) => {
    res.redirect('http://localhost:4200/sign-in');
});
app.get('/home', (req, res) => {
    res.redirect('http://localhost:4200/home');
});
app.get('/', (req, res) => {
    res.redirect('http://localhost:4200/');
});

app.get('/twitter/login', passport.authenticate('twitter'));

app.get('/twitter/return', passport.authenticate('twitter', {
    failureRedirect: '/sign-in'
}), function (req, res) {
    // 合并消息发送和跳转逻辑
    res.send('<script>window.opener.postMessage("authenticated", "*"); window.opener.location.href = "http://localhost:4200/home"; window.close();</script>');
});

// Start the server
const port = process.env.PORT || 3000;
app.listen(port, () => {
    console.log(`Server is running on port ${port}`);
});

内容的提问来源于stack exchange,提问作者caesar2243

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 00:45:24