发现流星:自动将http://添加到输入的URL

时间:2014-11-20 17:46:56

标签: javascript url meteor

我一直试图自己解决这个问题,但最终却无法长时间工作。

我目前正在关注Meteor.js的发现流星书。

我注意到,在没有http://的情况下提交帖子会将链接链接到localhost:3000/submittedurl

我希望meteor在提交时自动将http://添加到网址。从逻辑上讲,当输入字段中包含方案时,它不会添加http://

//post_submit.js

Template.postSubmit.created = function() {
    Session.set('postSubmitErrors', {});
};

Template.postSubmit.helpers({
    errorMessage: function(field) {
        return Session.get('postSubmitErrors')[field];
    },
    errorClass: function(field) {
        return !!Session.get('postSubmitErrors')[field] ? 'has-error' : '';
    }
});

Template.postSubmit.events({
    'submit form': function(e) {
        e.preventDefault();

        var post = {
            url: $(e.target).find('[name=url]').val(),
            title: $(e.target).find('[name=title]').val()
        };

        var errors = validatePost(post);
        if (errors.title || errors.url)
            return Session.set('postSubmitErrors', errors);

        Meteor.call('postInsert', post, function(error, result) {
            // display the error to the user and abort
            if (error)
                return throwError(error.reason);

            // show this result but route anyway
            if (result.postExists)
                throwError('This link has already been posted');

            Router.go('postPage', {_id: result._id});
        });
    }
});

1 个答案:

答案 0 :(得分:0)

嗯,实际上这是一个简单的javascript问题,不一定与Meteor相关。

例如,此问题Prepending "http://" to a URL that doesn't already contain "http://"的答案提供了一种方法:

checkForProperURLPrefixAndFixIfNecessary = function(testUrl) {
  var prefix = 'http://';
  if (testUrl.substr(0, prefix.length) !== prefix) {
    testUrl = prefix + testUrl;
  }
  return testUrl;
}

或者您可以看到不同方法的其他答案。我认为JS-URI库方法更安全。

所以,让我们假设您在源代码中声明了checkForProperURLPrefixAndFixIfNecessary(testUrl)函数,如上所示,然后您可以更改

var post = {
  url: $(e.target).find('[name=url]').val(),
  title: $(e.target).find('[name=title]').val()
};

var post = {
  url: checkForProperURLPrefixAndFixIfNecessary( $(e.target).find('[name=url]').val() ),
  title: $(e.target).find('[name=title]').val()
};

但是一旦你完成了探索流星书,这是 学习Meteor的最佳方式,请查看精彩的https://github.com/aldeed/meteor-simple-schema包或只搜索 schema < / {>> 验证 https://atmospherejs.com/,以便更有效地检查用户输入的类型和结构。