首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >标识一个值的javascript语句

标识一个值的javascript语句
EN

Stack Overflow用户
提问于 2020-11-17 18:58:36
回答 1查看 59关注 0票数 0

我有一个问题,让我的可信ip地址的工作-我可以让IP1的工作,但它应该如何,但其余的只是转移回持有页-我错过了什么?

代码:

代码语言:javascript
复制
  addEventListener("fetch", event => {
      event.respondWith(fetchAndReplace(event.request))
    })
     
    async function fetchAndReplace(request) {
     
      let modifiedHeaders = new Headers()
     
      modifiedHeaders.set('Content-Type', 'text/html')
      modifiedHeaders.append('Pragma', 'no-cache')
    
      // Allow users through if they are bypass flag and set a cookie
      if(request.url.includes("bypass"))
      {
        // Forward request to origin, get response.
        let response = await fetch(request)
    
        // Copy Response object so that we can edit headers.
        response = new Response(response.body, response)
        
        // set a cookie for the session
        response.headers.set("Set-Cookie", "cf:maintenance-mode=bypass");
        
        // Return on to client.
        return response
      }
    
      // Allow users through if they have the bypass cookie
      // Check for cookie.
      let cookies = request.headers.get('Cookie') || ""
      if (cookies.includes("cf:maintenance-mode=bypass")) {
        // User has been here before. Just pass request through.
        return fetch(request)
      }
    
      //Return maint page if you're not calling from a trusted IP
      
      var connectionIP = request.headers.get("cf-connecting-ip")
    
    if (connectionIP != "ip1" || connectionIP != "ip2" || connectionIP != "ip3") { 
        // Return modified response.
        return new Response(maintPage, {
          headers: modifiedHeaders
        })
      }
       //Allow users from trusted into site
      else
      {
        //Fire all other requests directly to our WebServers
        return fetch(request)
      }
    }
     
    let maintPage = `
     
    <!doctype html>
    <title>Site Maintenance</title>
    <style>
      body { 
            text-align: center; 
            padding: 150px; 
            background: url('data:image/jpeg;base64,<base64EncodedImage>'); 
            background-size: cover;
            -webkit-background-size: cover;
            -moz-background-size: cover;
            -o-background-size: cover;
          }
     
        .content {
            background-color: rgba(255, 255, 255, 0.75); 
            background-size: 100%;      
            color: inherit;
            padding-top: 1px;
            padding-bottom: 10px;
            padding-left: 100px;
            padding-right: 100px;
            border-radius: 15px;        
        }
     
      h1 { font-size: 40pt;}
      body { font: 20px Helvetica, sans-serif; color: #333; }
      article { display: block; text-align: left; width: 75%; margin: 0 auto; }
      a:hover { color: #333; text-decoration: none; }  
     
     
    </style>
     
    <article>
     
            <div class="background">
                <div class="content">
            <h1>We&rsquo;ll be back soon!</h1>        
                <p>We're very sorry for the inconvenience but we&rsquo;re performing maintenance. Please check back soon...</p>
            </div>
        </div>
     
    </article>`;
EN

回答 1

Stack Overflow用户

发布于 2020-11-17 19:16:02

你有错误的逻辑运算符。

假设connectionIPip1

代码语言:javascript
复制
connectionIP != "ip1" || connectionIP != "ip2" || connectionIP != "ip3"
-> "ip1" != "ip1" || "ip1" != "ip2" || "ip1" != "ip3"
-> false || true || true
-> true

// Or if it's ip2...
-> "ip2" != "ip1" || "ip2" != "ip2" || "ip2" != "ip3"
-> true || false || true
-> true

// Or if it's something else...
-> "different" != "ip1" || "different" != "ip2" || "different" != "ip3"
-> true || true || true
-> true

不管connectionIP是什么,它总是要计算为true,因为它总是不等于列表中的值之一。

你真正想要的是&&

代码语言:javascript
复制
connectionIP !== "ip1" && connectionIP !== "ip2" && connectionIP !== "ip3"
-> "ip1" !== "ip1" && "ip1" !== "ip2" && "ip1" !== "ip3"
-> false && true && true
-> false

// Or if it's ip2...
-> "ip2" !== "ip1" && "ip2" !== "ip2" && "ip2" !== "ip3"
-> true && false && true
-> false

// Or if it's something else...
-> "different" !== "ip1" && "different" !== "ip2" && "different" !== "ip3"
-> true && true && true
-> true

如果使用Set,则逻辑可能更易于遵循和更易于维护。

代码语言:javascript
复制
const internalAddresses = new Set(["ip1", "ip2", "ip3"]);

// ...

return internalAddresses.has(connectionIP)
  ? fetch(request) 
  : new Response(maintPage, { headers: modifiedHeaders })
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64881610

复制
相关文章

相似问题

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