如何将两个参数传递给骨干网中的model.fetch()?

时间:2012-12-24 09:48:22

标签: javascript node.js mongodb backbone.js database

我正在制作一个非常简单的用户身份验证系统。我正在尝试将usernamepassword的组合作为params传递给后端nodejs服务器。因此,我的数据库查询将使用此组合来获取用户详细信息。

这是我在前端尝试的内容:

var user = new UserModel({id:['username', 'password']});
user.fetch();

我在模型中定义了一个urlRoot属性,如下所示:/api/users

后端将处理以下网址:/api/users/:id

由于我已将id作为数组传递,因此我尝试通过执行此req.params.id[0]来访问“用户名”。相反,它返回'用户名'的第一个字母。但我想要取整个用户名字符串。当然我可以使用split()函数来分隔它们,但我相信有更好的方法可以做到这一点。

请告诉我,我的方法在某处是否有问题。

1 个答案:

答案 0 :(得分:1)

这是因为Backbone将您的数组序列化为字符串,然后将其编码为URI组件。

如此有效地发送字符串'username%2Cpassword'而不是数组。

我遇到了同样的问题并且认为登录过程并不真正代表任何“物理”资源,并且很可能不应该由用户模型处理。登录时,没有CRUD用户。

我所做的是为SignIn创建一个单独的模型:

SignInModel = Backbone.Model.extend({
    urlRoot: 'api/sign_in',
    defaults: {
        'username' : '',
        'password': ''
    }
});

静态映射到api/sign_in(此处没有id),然后通过请求正文中传递给api/sign_in处理程序的用户名和密码查询数据库。

然后可以留下

UserModel来处理用户的CRUD。