Hapi.js v17 CORS飞行前未返回Access-Control-Allow-Origin标头

时间:2019-04-02 14:43:14

标签: javascript node.js cors hapijs

我使用NodeJs + HapiJs V17开发了REST WebServices,我与Angular 6集成在一起,当我开始执行POST / PUT请求时遇到了CORS的麻烦 我在本地主机和端口4000上部署了HapiJS应用程序,并使用Angular Cli运行Angular 6代码。

从Chrome浏览器执行此操作时,出现以下错误:

从原点“ http://localhost:4000/api/v1/authenticateUser”到“ http://localhost:4200”处对XMLHttpRequest的访问已被CORS策略阻止:对预检请求的响应未通过访问控制检查:否'Access-Control-Allow-来源的标头出现在请求的资源上。

我在Hapi Server的标头部分尝试了各种选项

Hapi服务器代码

const server = new Hapi.Server({
  port: 4000, routes: {
    cors: {
      origin: ['*'],
      headers: ["Accept", "Authorization", "Content-Type", "If-None-Match", "Accept-language"]
    }
  }
});

角度6

public login(payload: TokenPayload): Observable<ServiceResponse> {
        return this.http.post<ServiceResponse>(`${environment.apiUrl}/authenticateUser`, payload)
            .pipe(map(response => {
                if (response.data) this.saveUser(response.data);
                return response;
            }));
    }

我搜索了很多帖子,尝试了很多事情,但是没有运气。 如果有人遇到此问题并已解决,请向我发布解决方案。 这阻止了我的产品发布。

这不是以下链接的重复帖子: hapi.js Cors Pre-flight not returning Access-Control-Allow-Origin header

在上面的链接中,这是Hapi V16的问题。 但是我在HapiJS V17中遇到了这个问题。


我找到了解决方法:

使用hapi-cors插件,请参见下面的示例代码。

await server.register({
 plugin: require('hapi-cors'),
 options: {
   origins: ['*'],
   allowCredentials: 'true',
   exposeHeaders: ['content-type', 'content-length'],
   maxAge: 600,
   methods: ['GET, HEAD, PUT, PATCH, POST, DELETE, OPTIONS'],
   headers: ['Accept', 'Content-Type', 'Authorization'] // add your header params
 },
 checkOrigin: true
});

await server.start();`

1 个答案:

答案 0 :(得分:0)

您是否尝试过import configparser from io import StringIO import datetime def update_tmstmp_value(config_string): fo = StringIO(config_string) data = '' for line in fo.readlines(): if line.startswith('tmstmp'): key, tmstmp_str = line.strip().split('=') try: value = datetime.datetime.now().strftime(tmstmp_str) except ValueError: value = datetime.datetime.now().strftime('%Y%m%d') data += key + '=' + value + '\n' else: data += line return data config_data = """ [DEFAULT] tmstmp=%Y%m%d type=REPLACE_ME_%(tmstmp)s [section1] item1=val1_%(type)s item2=val2 [section2] item3=val3_%(type)s item4=val4 """ config = configparser.ConfigParser() modified_config_data = update_tmstmp_value(config_data) config.read_string(modified_config_data) print(config.items('section1')) 标志?

[('tmstmp', '20190402'), ('type', 'REPLACE_ME_20190402'), ('item1', 'val1_REPLACE_ME_20190402'), ('item2', 'val2')]