我正在使用Rails 4创建一组服务,我正在使用JavaScript浏览器应用程序.跨源GETS工作正常,但我的POST未通过预检OPTIONS检查404错误.至少,我认为这是正在发生的事情.以下是控制台中出现的错误.这是Mac上的Chrome 31.0.1650.63.
OPTIONS http://localhost:3000/confessor_requests 404 (Not Found) jquery-1.10.2.js:8706
OPTIONS http://localhost:3000/confessor_requests No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost' is therefore not allowed access. jquery-1.10.2.js:8706
XMLHttpRequest cannot load http://localhost:3000/confessor_requests. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost' is therefore not allowed access. main.html:1
Run Code Online (Sandbox Code Playgroud)
我已经搜索了关于启用CORS的指令的高低,我很难过.通常的建议似乎是将这样的东西放在Application控制器中,我做了.
before_filter :cors_preflight_check
after_filter :cors_set_access_control_headers
def cors_set_access_control_headers
headers['Access-Control-Allow-Origin'] = '*'
headers['Access-Control-Allow-Methods'] = 'POST, PUT, GET, OPTIONS'
headers['Access-Control-Allow-Headers'] = '*'
headers['Access-Control-Max-Age'] = "1728000"
end
def cors_preflight_check
if request.method == :options
headers['Access-Control-Allow-Origin'] = …Run Code Online (Sandbox Code Playgroud) xmlhttprequest rails-routing http-method cors ruby-on-rails-4
我有一个旧的,令人讨厌的JavaScript文件,里面充满了我需要提供给Angular服务的东西,而我只是想不出办法。对于为此很难找到一个教程,我感到很惊讶。也许我就是这样,以至于我什至都不知道该怎么问...
我已经为其创建了一个声明文件(假设它称为oldstuff.d.ts)。
澄清:这只是一个声明文件。实际的代码位于另一个文件中:oldstuff.js
在我的Angular服务的顶部,我要像这样导入声明文件:
import './oldstuff.d';
Run Code Online (Sandbox Code Playgroud)
我在应用程序的任何地方都没有做任何其他尝试来获取包含的声明文件。
这种导入足以使VS Code能够识别这些定义,并且所有的intellisense都可以按我期望的那样工作。
实际上,我什至可以使用Angular CLI来构建项目,并且看起来可以构建。
但是,一旦我尝试将此服务注入到应用程序中其他位置的构造函数中,构建就会失败,并显示以下错误:
ERROR in ./src/app/oldstuff.d.ts
Module build failed: Error: Debug Failure. False expression: Output generation failed
at Object.assert (c:\Projects\Angular\MyApp\node_modules\typescript\lib\typescript.js:3329:23)
at Object.transpileModule (c:\Projects\Angular\MyApp\node_modules\typescript\lib\typescript.js:80449:18)
at TypeScriptFileRefactor.transpile (c:\Projects\Angular\MyApp\node_modules\@ngtools\webpack\src\refactor.js:166:27)
at Promise.resolve.then.then.then.then (c:\Projects\Angular\MyApp\node_modules\@ngtools\webpack\src\loader.js:414:37)
@ ./src/app/my-app.module.ts 23:0-34
@ ./src/main.ts
@ multi ./src/main.ts
Run Code Online (Sandbox Code Playgroud)
我已经搜索了该特定的错误消息,以及有关如何包括声明文件的一般信息,而我干了。
这是我看过的一些东西:
我遇到了合法错误,还是我做错了?
好吧,这看起来确实很愚蠢,但是我要做的就是从文件名中删除字母“ d”。
因此,代替此:
//actual filename: oldstuff.d.ts
import './oldstuff.d';
Run Code Online (Sandbox Code Playgroud)
我有这个:
//actual filename: oldstuff.ts
import './oldstuff'
Run Code Online (Sandbox Code Playgroud)
现在,它可以按预期在运行时生成并运行。我对Typescript的理解不够充分,无法理解这是否是预期的行为。我的预感不是,这是一个错误,但是我真的不知道...