SimplifyConnections.appspot.com 已經作業多年,但突然拋出 404 錯誤,不允許讀取現有地圖圖釘和新地圖圖釘。部署的應用程式和本地 sdk 上都會發生此新故障。您可以通過創建自己的地圖圖釘在鏈接上進行實驗,它看起來會被接受,但是當您重繪 鏈接時,您的地圖圖釘消失了。只有我的日志表明存在錯誤(見下文)。
我試圖創建以相同方式失敗的簡化代碼,但我的簡化代碼因另一個我不知道如何規避的錯誤而失敗:405 Method Not Allowed; 此資源不允許使用 POST 方法。但我相信我下面的代碼可能會提示我在實際應用程式的日志中看到的路由錯誤。
我接下來顯示了我現在得到的記錄的路由錯誤。
INFO 2021-11-28 17:28:32,466 module.py:861] default: "GET /details.txt?place=Playground HTTP/1.1" 404 -
INFO 2021-11-28 17:29:18,511 module.py:861] default: "GET /details.txt?Action=add&lat=23.828670922688467&lng=-8.0815625&details=Brian&category=1&label=BS&place=Playground HTTP/1.1" 404 -
接下來是我的偽代碼。
應用程式.yaml
runtime: python27
threadsafe: true
handlers:
- url: /
script: mainapp.app
basic_scaling:
max_instances: 1
#idle_timeout: 5m
主應用程式
import os
import logging
import webapp2
from google.appengine.ext import webapp
from google.appengine.ext.webapp.util import run_wsgi_app
from google.appengine.ext.webapp import template
class MainPage(webapp2.RequestHandler):
def get(self):
logging.info("MainPage: ")
self.response.out.write("pin in")
template_values = {}
path = os.path.join(os.path.dirname(__file__), 'index.html')
self.response.out.write(template.render(path, template_values))
class Details(webapp2.RequestHandler):
def get(self):
logging.info("Details: ")
action = self.request.get("Action", "Detail")
logging.info("action: %s " % (action))
self.response.out.write("pin in")
app = webapp2.WSGIApplication(
[('/', MainPage),
('/details.txt', Details)],
debug=True)
index.html(注意,在最后一行的第 4 行“post”必須改為“get”以避免 405 錯誤,但真正的代碼是“post”。)
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
</head>
<script>
function process(form) {
var details = escape(form.data.value);
var url = "details.txt?Action=add&name=" name;
// ===== send the data to the server
downloadUrl(url, function(doc) {
if (doc)
{markerID = doc; }
});
alert("Your information has been processed.");
}
function downloadUrl(url, callback) {
var status = -1;
var request = createXmlHttpRequest();
if (!request) {
return false;
}
request.onreadystatechange = function() {
if (request.readyState == 4) {
try {
status = request.status;
} catch (e) {
// Usually indicates request timed out in FF.
}
if (status == 200) {
// next line altered: Text replaces XML
callback(request.responseText, request.status);
request.onreadystatechange = function() {};
}
}
}
request.open('GET', url, true);
try {
request.send(null);
} catch (e) {
changeStatus(e);
}
};
</script>
<body>
<form name="myForm" action="#" onsubmit="return process(this)" method="post">
Name: <input type="text" name="name">
<input type="submit" value="Submit">
</form>
</body>
我不知道如何簡潔地顯示實際代碼,但我希望示例代碼提供足夠的資訊。我不相信映射應用程式與此錯誤相關,但它確實產生了由回呼處理的真實路由請求。
uj5u.com熱心網友回復:
答案簡單得令人尷尬。在app.yaml處理程式中需要更改以添加 .*.
runtime: python27
threadsafe: true
handlers:
- url: /.*
script: mainapp.app
basic_scaling:
max_instances: 1
uj5u.com熱心網友回復:
根據webapp2的檔案,如果您正在執行 POST,您需要定義一個 POST 方法......留言板處理程式有一個 post() 方法而不是 get() 方法。這是因為 MainPage 顯示的表單使用 HTTP POST 方法(method="post")提交表單資料。如果由于某種原因您需要一個處理程式來處理對同一 URL 的 GET 和 POST 操作,您可以為同一類中的每個操作定義一個方法......
對于您的路由,我很好奇您為什么使用
details.txt而不僅僅是details. 你認為這可能是你問題的原因嗎?
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/372076.html
