Authentication webpack dev服务器未使用hapi和hapi auth cookie正确代理重定向到后端

Authentication webpack dev服务器未使用hapi和hapi auth cookie正确代理重定向到后端,authentication,cookies,proxy,webpack,hapijs,Authentication,Cookies,Proxy,Webpack,Hapijs,当我启动hapi服务器和webpack dev服务器并转到localhost:3000/api/login时,会显示一个502坏网关,页面上没有任何内容!谢谢每一位帮助我的人 这是我的网页文件: module.exports = { entry: ["./index.js"], output: { filename: "bundle.js" }, module: { loaders: [ {

当我启动hapi服务器和webpack dev服务器并转到localhost:3000/api/login时,会显示一个502坏网关,页面上没有任何内容!谢谢每一位帮助我的人

这是我的网页文件:

module.exports = {
    entry: ["./index.js"],
    output: {
        filename: "bundle.js"
    },
    module: {
        loaders: [
            {
                test: /\.js$/,
                exclude: /node_modules/,
                loader: 'babel-loader',
                query: {
                    presets: ['react', 'es2015']
                }
            }
        ]
    },
    resolve: {
        extensions: ['', '.js', '.jsx']
    },
    devServer: {
        historyApiFallback: {
            index: 'index.html'
        },
        stats: 'normal',
        host: process.env.HOST || 'localhost',
        port: process.env.PORT || 3000,
        proxy: {
            '/api/*': {
                target: 'http//localhost:9000',
                secure: false
            }
        }
    }
};
这是我的hapi服务器:

const Hapi = require('hapi');
const Inert = require('inert');
const config = require('./config');
const CookieAuth = require('hapi-auth-cookie');

const server = new Hapi.Server();
server.connection({port: 9000});

const options = {
    ops: {
        interval: config.hapiGoodInterval
    },
    reporters: {
        console: [{
            module: 'good-squeeze',
            name: 'Squeeze',
            args: [{ log: '*', response: '*' }]
        }, {
            module: 'good-console'
        }, 'stdout'],
        file: [{
            module: 'good-squeeze',
            name: 'Squeeze',
            args: [{ ops: '*' }]
        }, {
            module: 'good-squeeze',
            name: 'SafeJson'
        }, {
            module: 'good-file',
            args: ['./logs/fixtures/file_log']
        }]
    }
};
server.register(CookieAuth, (err) => {
    if (err) {
        throw err;
    }
});

server.register(Inert, ()=>{});
server.register({
    register: require('good'),
    options,
}, (err) => {
    if (err) {
        return console.error(err);
    }
    server.start(() => {
        console.info(`Server started at ${ server.info.uri }`);
    });
});

const cache = server.cache({ segment: 'sessions', expiresIn: 3 * 24 * 60 * 60 * 1000 });
server.app.cache = cache;

server.auth.strategy('session', 'cookie', true, {
    password: 'Vaj57zED9nsYeMJGP2hnfaxU874t6DV5',
    cookie: 'sid-example',
    redirectTo: '/api/login',
    isSecure: false,
    validateFunc: function (request, session, callback) {

        cache.get(session.sid, (err, cached) => {

            if (err) {
                return callback(err, false);
            }

            if (!cached) {
                return callback(null, false);
            }

            return callback(null, true, cached.account);
        });
    }
});

server.route(require('./routes'));
以下是路线:

var Handlers = require('./handlers');
var Joi = require('joi');
var Routes = [
  {
      path: '/api/hello',
      method: 'GET',
      config: {
          auth:false,
          handler: function (request, reply) {
              reply('Hello from the server')
          }
      }
  },
  {
    method: ['GET', 'POST'],
    path: '/api/login',
    config: {
        handler: Handlers.login,
        auth: { mode: 'try' },
        plugins: {
          'hapi-auth-cookie': { redirectTo: false }
        }
    }
  },
  {
    path: '/api/logout',
    method: 'GET',
    handler: Handlers.logout
  }
];
最后是处理程序:

const r = require('rethinkdb');
var {Post, User, Opinion} = require('./rethinkdb/models/all');

class Handlers {

    static login(request, reply) {
        let username = 'pesho';
        let password = '12345';

        let uuid = 1;

        if (request.auth.isAuthenticated) {
            return reply.redirect('/');
        }

        let message = '';
        let account = null;

        if (request.method === 'post') {

            if (!request.payload.username ||
                !request.payload.password) {

                message = 'Missing username or password';
            }
            else {
                if (password !== request.payload.password || username !== request.payload.username) {
                    message = 'Invalid username or password';
                }
            }
        }

        if (request.method === 'get' || message) {

            return reply('<html><head><title>Login page</title></head><body>' +
                (message ? '<h3>' + message + '</h3><br/>' : '') +
                '<form method="post" action="/api/login">' +
                'Username: <input type="text" name="username"><br>' +
                'Password: <input type="password" name="password"><br/>' +
                '<input type="submit" value="Login"></form></body></html>');

        }

        const sid = String(++uuid);
        request.server.app.cache.set(sid, { account: account }, 0, (err) => {

            if (err) {
                reply(err);
            }

            request.cookieAuth.set({ sid: sid });
            return reply.redirect('/');
        });
    }

    static logout(request, reply) {
        request.cookieAuth.clear();
        return reply.redirect('/');
    };
}

module.exports = Handlers;
const r=require('db');
var{Post,User,Opinion}=require('./db/models/all');
类处理程序{
静态登录(请求、回复){
让username='pesho';
让密码='12345';
设uuid=1;
if(request.auth.isAuthenticated){
返回reply.redirect('/');
}
让消息=“”;
let account=null;
if(request.method==='post'){
如果(!request.payload.username)||
!request.payload.password){
消息='缺少用户名或密码';
}
否则{
if(密码!==request.payload.password | | username!==request.payload.username){
消息='无效的用户名或密码';
}
}
}
if(request.method=='get'| |消息){
返回回复('登录页面'+
(消息?''+消息+'
':'')+ '' + '用户名:
'+ '密码:
'+ ''); } 常量sid=字符串(++uuid); request.server.app.cache.set(sid,{account:account},0,(err)=>{ 如果(错误){ 答复(错误); } request.cookieAuth.set({sid:sid}); 返回reply.redirect('/'); }); } 静态注销(请求、答复){ request.cookieAuth.clear(); 返回reply.redirect('/'); }; } module.exports=处理程序;
问题是a类转储,但问题是: 必须在代理目标的末尾添加“/”

       proxy: {
            '/api/*': {
                target: 'http://localhost:9000/',<= This here
                secure: false
            }
        },
代理:{
“/api/*”:{
目标:'http://localhost:9000/',