sails.js中的骨干

时间:2013-11-26 08:36:17

标签: javascript backbone.js cross-domain cors sails.js

我正在使用风帆和护照创建一个用于身份验证的网站。我在代码中使用Jquery和骨干时遇到了问题。当我试图将它们与帆一起使用时,似乎两者都失败了。在用户身份验证之后,我尝试做的是将用户路由到存在所有脚本的主页。我将所有.js文件放在layout.ejs中,例如:

<link rel="stylesheet" href="styles/bootstrap-theme.min.css">
<script type="text/javascript" src="js/jquery.js"></script>

大多数css和js文件都有效,但我遇到了backbone和jquery(以及jquerymobile)的问题。我使用的是jQuery 1.10.2和主干1.1.0。知道什么可能是错的吗?

在骨干代码中,我试图通过php文件发出Ajax请求。

   var ProfileList = Backbone.Collection.extend({

                    model: ProfileModel,
                    url: 'data.php'
    });   

我到底要做什么?要在路线中添加网址?或者我应该在哪里放置data.php文件?

编辑:我已经改变了gruntfile.js将jquery放在顶部并且工作正常。现在问题依然存在。我猜我的麻烦出现了,因为我要求使用护照和骨干访问不同的域名。当我使用data.php请求数据时,我调用以下jquery代码:

xhr.send( ( s.hasContent && s.data ) || null ): jquery.js (line 8706)   

这是一个Ajax XMLHttpRequest发送请求http://www.w3schools.com/ajax/ajax_xmlhttprequest_send.asp。我通常尝试从两个域localhost和localhost:1337请求数据,因此出现跨域问题。 我发现cors(跨源共享资源共享)可以处理这个问题。知道如何在sails.js中允许cors吗?

编辑:在route.js文件中,我将主页cors转为true:

'/secondscreen': {
view: 'secondsocialscreen/index',
cors: true  

}

我仍然收到同样的错误。我还在config / cors.js文件中将变量AllRoutes更改为true。我的骨干文件工作(使用控制台检查),但我无法获取数据。 Config / cors.js文件如下:

module.exports.cors = {

    // Allow CORS on all routes by default?  If not, you must enable CORS on a 
    // per-route basis by either adding a "cors" configuration object
    // to the route config, or setting "cors:true" in the route config to
    // use the default settings below.
    allRoutes: true,

    // Which domains which are allowed CORS access?
    // This can be a comma-delimited list of hosts (beginning with http:// or https://)
    // or "*" to allow all domains CORS access.
    origin: '*',

    // Allow cookies to be shared for CORS requests?
    credentials: true,

    // Which methods should be allowed for CORS requests?  This is only used
    // in response to preflight requests (see article linked above for more info)
    methods: 'GET, POST, PUT, DELETE, OPTIONS, HEAD',

    // Which headers should be allowed for CORS requests?  This is only used
    // in response to preflight requests.
    headers: 'content-type' 
    };

我错过了什么吗?好吧我觉得我找到了一些东西。实际上我正试图指向一个home.ejs,我定义了一个fetching.js(从data.php获取数据和模型控制器视图的定义),其中存在骨干代码。这个文件是否可以按原样运行,或者我从风帆中定义我的MVC?此外,我发现我正在尝试从localhost:1337(sails服务器)获取数据。但是我想从apache localhost获取数据。如何在运行sails时向apache服务器请求数据?在萤火虫中,我收到了上述内容:

 GET http://localhost/sitec/fetchdata.php?widget=highlights 200 OK 47ms jquery.js (line 8706)
 GET http://localhost/sitec/fetchdata.php?widget=sentiment 200 OK 47ms jquery.js (line 8706)
 GET http://localhost/sitec/fetchdata.php?widget=tagsCloud 200 OK 47ms jquery.js (line 8706)

作为响应而不是拥有json数据的对象(data.php返回json文件),实际上我可以看到data.php文件的代码。怪异

2 个答案:

答案 0 :(得分:3)

Sails.js默认使用grunt来添加CSS和JS文件。手动添加布局不是一个好主意。在主根中的文件Gruntfile.js中,您将看到两个重要的数组--cssFilesToInject和jsFilesToInject。要按正确的顺序加载文件,只需按照您的需要添加它们。

var jsFilesToInject = [

// Below, as a demonstration, you'll see the built-in dependencies 
// linked in the proper order order

// Bring in the socket.io client
'linker/js/socket.io.js',

// then beef it up with some convenience logic for talking to Sails.js
'linker/js/sails.io.js',

// A simpler boilerplate library for getting you up and running w/ an
// automatic listener for incoming messages from Socket.io.
'linker/js/app.js',

// *->    put other dependencies here   <-*
'path_to_jquery',
'path_to_underscore',
'path_to_backbone',

// All of the rest of your app scripts imported here
'linker/**/*.js'
];

答案 1 :(得分:3)

我们通过修改config / routes.js

在风帆中使用CORS

module.exports.routes = {

&#39; / *&#39;:{     科尔斯:是的   }

}

此处记录:http://sailsjs.org/#!documentation/config.routes