Angular 5 个到 CherryPy POST
Angular 5 to CherryPy POST
我正在尝试从 Angular 5 应用程序向 cherrypy 后端发送数据。我能够调用正确的 cherrypy 函数并获得 200 响应,但是 none 我的参数正在通过。
引起我注意的一件事是,当我在 chrome 调试器中单击 view source
时,我的有效负载看起来像这样 {"username":"admin","password":"admin"}
。这应该采用不同的格式吗?
这是我的 post:
getUserDetails(username, password) {
const _headers = new HttpHeaders();
const headers = _headers.append('Content-Type', 'application/json');
const options = {headers: headers };
this.data = JSON.stringify({ username, password });
return this.http.post(this.url1 + 'login', this.data, options )
.subscribe(data => {
console.log(data);
});
}
同样,这到达了正确的终点,只有 none 的数据通过。
这是 cherryPy:
登录函数:
class authServer(object):
@cherrypy.expose
def login(self,*args, **kwargs):
print(type(args),args, kwargs)
我尝试了各种参数,如果我有 username
和 password
,我会收到错误消息,指出缺少参数。
这是 cherrypy 配置。
def CORS():
"""Allow AngularJS apps not on the same server to use our API
"""
cherrypy.response.headers["Access-Control-Allow-Origin"] = "*"
cherrypy.response.headers["Access-Control-Allow-Headers"] = \
"content-type, Authorization, X-Requested-With"
cherrypy.response.headers["Access-Control-Allow-Methods"] = 'GET, POST'
if __name__ == '__main__':
cherrypy.tools.CORS = cherrypy.Tool('before_handler', CORS)
cherrypy.log.error_log.propagate = False
cherrypy.log.access_log.propagate = False
cherrypy.config.update({'server.thread_pool': 30,
'tools.CORS.on': True,
'server.socket_host': '0.0.0.0',
'server.socket_port': 8081})
cherrypy.quickstart(authServer(), '/')
我之前已经为 cherrypy 制作了无数 posts。这里唯一的区别是我使用的前端。任何帮助将不胜感激。
谢谢,
原来是 CORS 问题。我从此更改了我的 CORS 函数:
def CORS():
cherrypy.response.headers["Access-Control-Allow-Origin"] = "*"
cherrypy.response.headers["Access-Control-Allow-Headers"] = \
"content-type, Authorization, X-Requested-With"
cherrypy.response.headers["Access-Control-Allow-Methods"] = 'GET, POST'
对此:
def CORS():
if cherrypy.request.method == 'OPTIONS':
cherrypy.response.headers['Access-Control-Allow-Methods'] = 'POST'
cherrypy.response.headers['Access-Control-Allow-Headers'] = 'content-type'
cherrypy.response.headers['Access-Control-Allow-Origin'] = '*'
return True
else:
cherrypy.response.headers['Access-Control-Allow-Origin'] = '*'
cherrypy.tools.CORS = cherrypy._cptools.HandlerTool(CORS)
在我的主要功能上面我放了这个:
@cherrypy.expose
@cherrypy.config(**{'tools.CORS.on': True})
@cherrypy.tools.json_in()
@cherrypy.tools.json_out()
我正在尝试从 Angular 5 应用程序向 cherrypy 后端发送数据。我能够调用正确的 cherrypy 函数并获得 200 响应,但是 none 我的参数正在通过。
引起我注意的一件事是,当我在 chrome 调试器中单击 view source
时,我的有效负载看起来像这样 {"username":"admin","password":"admin"}
。这应该采用不同的格式吗?
这是我的 post:
getUserDetails(username, password) {
const _headers = new HttpHeaders();
const headers = _headers.append('Content-Type', 'application/json');
const options = {headers: headers };
this.data = JSON.stringify({ username, password });
return this.http.post(this.url1 + 'login', this.data, options )
.subscribe(data => {
console.log(data);
});
}
同样,这到达了正确的终点,只有 none 的数据通过。
这是 cherryPy:
登录函数:
class authServer(object):
@cherrypy.expose
def login(self,*args, **kwargs):
print(type(args),args, kwargs)
我尝试了各种参数,如果我有 username
和 password
,我会收到错误消息,指出缺少参数。
这是 cherrypy 配置。
def CORS():
"""Allow AngularJS apps not on the same server to use our API
"""
cherrypy.response.headers["Access-Control-Allow-Origin"] = "*"
cherrypy.response.headers["Access-Control-Allow-Headers"] = \
"content-type, Authorization, X-Requested-With"
cherrypy.response.headers["Access-Control-Allow-Methods"] = 'GET, POST'
if __name__ == '__main__':
cherrypy.tools.CORS = cherrypy.Tool('before_handler', CORS)
cherrypy.log.error_log.propagate = False
cherrypy.log.access_log.propagate = False
cherrypy.config.update({'server.thread_pool': 30,
'tools.CORS.on': True,
'server.socket_host': '0.0.0.0',
'server.socket_port': 8081})
cherrypy.quickstart(authServer(), '/')
我之前已经为 cherrypy 制作了无数 posts。这里唯一的区别是我使用的前端。任何帮助将不胜感激。
谢谢,
原来是 CORS 问题。我从此更改了我的 CORS 函数:
def CORS():
cherrypy.response.headers["Access-Control-Allow-Origin"] = "*"
cherrypy.response.headers["Access-Control-Allow-Headers"] = \
"content-type, Authorization, X-Requested-With"
cherrypy.response.headers["Access-Control-Allow-Methods"] = 'GET, POST'
对此:
def CORS():
if cherrypy.request.method == 'OPTIONS':
cherrypy.response.headers['Access-Control-Allow-Methods'] = 'POST'
cherrypy.response.headers['Access-Control-Allow-Headers'] = 'content-type'
cherrypy.response.headers['Access-Control-Allow-Origin'] = '*'
return True
else:
cherrypy.response.headers['Access-Control-Allow-Origin'] = '*'
cherrypy.tools.CORS = cherrypy._cptools.HandlerTool(CORS)
在我的主要功能上面我放了这个:
@cherrypy.expose
@cherrypy.config(**{'tools.CORS.on': True})
@cherrypy.tools.json_in()
@cherrypy.tools.json_out()