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

如何在Faust.js前端实现HTTP基础认证(无需转TypeScript)

纯JavaScript Faust.js项目添加HTTP基础认证请求头解决方案

我用Faust.js构建Headless WordPress前端,遇到以下问题:WordPress后端要求携带Base64编码凭证的HTTP基础认证才能访问内容,本地环境无需添加凭证即可正常请求,但生产环境因缺少认证头,无法获取文章内容及图片资源。

找到的解决方案示例都是TypeScript版本,不想将项目转为TypeScript(避免破坏现有node_modules),自行改写为JavaScript后构建报错,代码及错误信息如下:

改写后的错误代码

import { IncomingMessage } from 'http';
import { getClient, logQueries } from '@faustjs/next';

import {
   generatedSchema,
   scalarsEnumsHash,
   GeneratedSchema,
   SchemaObjectTypes,
   SchemaObjectTypesNames,
} from './schema.generated';

export const client = getClient({
   GeneratedSchema,
   SchemaObjectTypesNames,
   SchemaObjectTypes,
   schema: generatedSchema,
   scalarsEnumsHash,
   applyRequestContext: async (url, init) => {
        const newInit = {
            ...init,
            headers: {
                ...init.headers,
                authorization: 'Basic YmxhbmtkZXhzaXRzdGc6OTMzODVlNjY=',
            },
        };

        return { url, init: newInit };
    },
});

export function serverClient(req) {
   return getClient<GeneratedSchema, SchemaObjectTypesNames, SchemaObjectTypes>({
     schema: generatedSchema,
     scalarsEnumsHash,
     context: req,
   });
}

if (process.env.NODE_ENV === 'development') {
  logQueries(client);
}

export * from './schema.generated';

报错信息

  • 1:1 Error: There should be at least one empty line between import groups import/order
  • 8:3 Error: GeneratedSchema not found in './schema.generated' import/named
  • 9:3 Error: SchemaObjectTypes not found in './schema.generated' import/named
  • 10:3 Error: SchemaObjectTypesNames not found in './schema.generated' import/named

错误修复及正确代码实现

1. 修复import顺序格式问题

ESLint的import/order规则要求Node.js核心模块与第三方模块的导入之间空一行,调整导入代码:

import { IncomingMessage } from 'http';

import { getClient, logQueries } from '@faustjs/next';

2. 移除TypeScript专属类型依赖

纯JavaScript项目中,GeneratedSchema、SchemaObjectTypes、SchemaObjectTypesNames都是TypeScript的类型定义,schema.generated.js不会导出这些内容,直接移除相关导入及调用参数。

3. 修正客户端与服务端请求配置

服务端的serverClient同样需要添加认证头,避免服务端渲染时请求失败。同时建议将认证凭证存入环境变量,不要硬编码到代码中。

最终正确代码

import { IncomingMessage } from 'http';

import { getClient, logQueries } from '@faustjs/next';
import { generatedSchema, scalarsEnumsHash } from './schema.generated';

// 从环境变量读取认证凭证,生产环境在.env.production中配置
const WP_AUTH_HEADER = process.env.WP_AUTH_CREDENTIALS;

export const client = getClient({
  schema: generatedSchema,
  scalarsEnumsHash,
  applyRequestContext: async (url, init) => {
    const newInit = {
      ...init,
      headers: {
        ...init.headers,
        // 仅生产环境添加认证头,本地环境跳过
        ...(process.env.NODE_ENV === 'production' && { authorization: WP_AUTH_HEADER }),
      },
    };

    return { url, init: newInit };
  },
});

export function serverClient(req) {
  return getClient({
    schema: generatedSchema,
    scalarsEnumsHash,
    context: req,
    applyRequestContext: async (url, init) => {
      const newInit = {
        ...init,
        headers: {
          ...init.headers,
          ...(process.env.NODE_ENV === 'production' && { authorization: WP_AUTH_HEADER }),
        },
      };

      return { url, init: newInit };
    },
  });
}

if (process.env.NODE_ENV === 'development') {
  logQueries(client);
}

export * from './schema.generated';

环境变量配置示例

在项目根目录创建.env.production文件:

WP_AUTH_CREDENTIALS=Basic YmxhbmtkZXhzaXRzdGc6OTMzODVlNjY=

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 01:25:23