这可能看起来很愚蠢,但是当Axios中的请求失败时,我正试图获取错误数据.
axios.get('foo.com')
.then((response) => {})
.catch((error) => {
console.log(error) //Logs a string: Error: Request failed with status code 404
})
Run Code Online (Sandbox Code Playgroud)
而不是字符串,是否可以获得具有状态代码和内容的对象?例如:
Object = {status: 404, reason: 'Not found', body: '404 Not found'}
Run Code Online (Sandbox Code Playgroud) 是否可以在表单字段上有多个验证器?我尝试了这个,但它导致了一些奇怪的错误(字段永远无效,即使满足要求)
this.username = new Control('', Validators.minLength(5), Validators.required);
Run Code Online (Sandbox Code Playgroud)
我如何使用多个验证器?
我需要上传一个文件并发送一些json,我有这个功能:
POST_formData(url, data) {
var headers = new Headers(), authtoken = localStorage.getItem('authtoken');
if (authtoken) {
headers.append("Authorization", 'Token ' + authtoken)
}
headers.append("Accept", 'application/json');
headers.delete("Content-Type");
var requestoptions = new RequestOptions({
method: RequestMethod.Post,
url: this.apiURL + url,
headers: headers,
body: data
})
return this.http.request(new Request(requestoptions))
.map((res: Response) => {
if (res) {
return { status: res.status, json: res.json() }
}
})
}
Run Code Online (Sandbox Code Playgroud)
我的问题是,如果我设置content-type为" multipart/form-data"我的服务器抱怨边界,如果我content-type完全删除标头,我的服务器抱怨它" text/plain"支持的媒体类型.
那么,如何使用angular2发送FormData?
现在,我做http请求的方式(借用这个答案)是这样的:
POST(url, data) {
var headers = new Headers(), authtoken = localStorage.getItem('authtoken');
headers.append("Content-Type", 'application/json');
if (authtoken) {
headers.append("Authorization", 'Token ' + authtoken)
}
headers.append("Accept", 'application/json');
var requestoptions = new RequestOptions({
method: RequestMethod.Post,
url: this.apiURL + url,
headers: headers,
body: JSON.stringify(data)
})
return this.http.request(new Request(requestoptions))
.map((res: Response) => {
if (res) {
return { status: res.status, json: res.json() }
}
});
}
Run Code Online (Sandbox Code Playgroud)
这样可以正常工作,除非如果返回的状态代码不是200,angular2将失败.例如,如果用户想要发布某些东西而服务器返回400,则角度2将抛出异常:
未捕获的异常:[object Object]
我怎么能避免这个?我想在我的应用中处理这些状态代码,以增强用户体验(显示错误等)
我不明白我做错了什么,当我尝试获取json时,我的服务器返回"undefined".
POST(url, data) {
var headers = new Headers(), authtoken = localStorage.getItem('authtoken');
headers.append("Content-Type", 'application/json');
if (authtoken) {
headers.append("Authorization", 'Token ' + authtoken)
}
headers.append("Accept", 'application/json');
var requestoptions = new RequestOptions({
method: RequestMethod.Post,
url: this.apiURL + url,
headers: headers,
body: data
})
return this.http.request(new Request(requestoptions))
.map((res: Response) => {
if (res) {
return { status: res.status, json: res.json() }
}
});
}
Run Code Online (Sandbox Code Playgroud)
我的功能:
login(username, password) {
this.POST('login/', {test: 'test'}).subscribe(data => {
console.log(data)
})
}
Run Code Online (Sandbox Code Playgroud)
当我尝试这个时,请求体看起来像这样:
因此,它不是发送实际的json,而是发送"[object Object]".它不应该是"请求有效载荷",而应该是"JSON".我究竟做错了什么?
如果输入了无效路径,有没有办法配置Angular2路由器重定向到特定路由?
例如,如果我有三条路线:
/ home
/ about
/ 404
我输入/训练(路线,路线配置中不存在),我希望路由器将我重定向到404.
我已经为这个问题到处谷歌,但找不到任何东西。我处于需要删除 asource = createMediaElementSource以便我可以再次创建它的情况。我正在使用音频分析器,每次使用 ajax 加载指定曲目时都必须加载它。一旦你转到另一个页面,然后返回,分析器就消失了。因此我需要以某种方式重新初始化它。
我的代码:
var analyserElement = document.getElementById('analyzer');
var canvas, ctx, source, context, analyser, fbc_array, bars, bar_x,
bar_width, bar_height;
function analyzerSetElements() {
var analyserElement = document.getElementById('analyzer');
}
function analyzerInitialize() {
if (context == undefined) {
context = new AudioContext();
}
analyser = context.createAnalyser();
canvas = analyserElement;
ctx = canvas.getContext('2d');
source = context.createMediaElementSource(audio);
source.connect(analyser);
analyser.connect(context.destination);
frameLooper();
}
function analyzerStop(){
context = undefined;
analyser = undefined;
source = undefined;
}
function frameLooper() {
canvas.width = canwidth;
canvas.height …Run Code Online (Sandbox Code Playgroud) 我问了一个类似于此前的问题,但它没有解决我的问题并且解释得很差.这次我做了插图,希望能更好地解释.
我的音频播放器有一个简单的频谱分析仪.频率存储在每个都更新的数组中requestAnimationFrame,数组如下所示:
fbc_array = new Uint8Array(analyser.frequencyBinCount);
analyser.getByteFrequencyData(fbc_array);
Run Code Online (Sandbox Code Playgroud)
在这里阅读更多关于getByteFrequencyData的信息.
所以这个工作正常,但我希望频率在整个频谱中均匀分布.现在它显示线性频率:
正如您所看到的,这里的主要频率范围是高音(高端),最主要的频率范围是低音范围(低端).我希望我的分析仪具有均匀分布的频率范围,如下所示:
在这里,您可以看到分析仪上均匀分布的频率.这可能吗?
我用于生成分析器的代码如下所示:
// These variables are dynamically changed, ignore them.
var canbars = 737
var canmultiplier = 8
var canspace = 1
// The analyser
var canvas, ctx, source, context, analyser, fbc_array, bars, bar_x,
bar_width, bar_height;
function audioAnalyserFrame() {
'use strict';
var i;
canvas.width = $('analyser-').width();
canvas.height = $('analyser-').height();
ctx.imageSmoothingEnabled = false;
fbc_array = new Uint8Array(analyser.frequencyBinCount);
analyser.getByteFrequencyData(fbc_array);
ctx.clearRect(0, 0, canvas.width, canvas.height); // Clear the canvas
ctx.fillStyle = "white"; …Run Code Online (Sandbox Code Playgroud) 我正在使用Django 1.9.
随着render_to_string我可以很容易地通过呈现的HTML作为JSON我的客户端脚本.但是,由于模板依赖于变量user,我还需要传递context_instance=RequestContext(request),否则模板不会知道是什么request.user,所以if语句中断等等.
但是我得到了这个弃用警告:
RemovedInDjango110Warning:不推荐使用render_to_string的context_instance参数.response_data ['content'] = render_to_string("profile/userprofile_detail/content.html",context,context_instance = RequestContext(request))
什么是非过时的方式来传递RequestContext的render_to_string?
我正在尝试在我的应用程序中允许CORS,以便我的跨域javascript客户端可以访问我的API,我已经安装了django-cors-headers.我现在正在尝试添加中间件:
MIDDLEWARE = [
'corsheaders.middleware.CorsMiddleware', # Remove this and it works
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
Run Code Online (Sandbox Code Playgroud)
但是这给了我一个TypeError:
TypeError:object()不带参数
这在django 1.10更新之前运行良好.有任何想法吗?
angular ×5
typescript ×5
javascript ×3
django ×2
axios ×1
file-upload ×1
mediaelement ×1
rest ×1