Node Express路由 - 绝对URL与相对URL

时间:2015-10-15 10:30:48

标签: node.js express routes absolute relative

我有一个这种类型的简单形式

<form name="keywords" action="www.mydomain.com:6161/articles" method="post">
<input type="text" name="keyword" />
<input type="submit" name="submit" value="Submit" />
</form>

用于处理表格的Express 4路线如下

app.post('/articles', routes.article.keyword);

实际路径文件包含以下内容

exports.keyword = function(req,res,next){
    res.send(req.body.keyword);
};

基于以上情况,当我在浏览器中发布表单时,我看到一个页面“地址未被理解”。

但是,如果我在表单操作中使用相对URL,即

它完美无缺。为什么这样?

因为实际上,我有时可能不得不将数据发布到不同的域或URL。

2 个答案:

答案 0 :(得分:0)

我会发表评论作为答案,因为它有所帮助。

为了使操作起作用,您需要指定包含架构的完整URL:

    def get_date(file_name):
        DATE_RE = re.compile('([0-9]{6})')    #EDITED - TYPO
        try:
            match = DATE_RE.search(fname).group()
        except AttributeError:
            sys.stderr.write('ERROR! No date matches string!\n\t' + match)
        else:
            date = datetime.datetime.strptime(match, '%Y%m%d')
            return match, date

    date_string, current_date = get_date(fname)
    # fname is a given file name (e.g. bla150420.txt)

    pattern1 = re.compile(re.sub(date_string, '(.*)', fname))
    # pattern1 returns value 'kds_docs-(.*).zip'

    pattern2 = re.compile('kds_docs-(.*).zip')

    if os.path.isdir(dirname):
        matching_files = [x for x in os.listdir(dirname) 
                          if pattern1.search(x)]

或者您可以使用相对网址:

<form name="keywords" action="http://www.example.com/articles" method="post">

答案 1 :(得分:0)

相对路径是一个不以/(正斜杠)开头的...通常,这将尝试从当前网址的基础目录加载(您可以设置此在html中,虽然浏览器默认使用网址的&#39; dirname&#39;(例如&#39; img / something.gif&#39;在&#39; /some/path/index.html&页面上#39;将从/some/path/img/something.gif')中获取。

绝对路径是以/开头的路径。它将使用相同的模式,主机和可选的端口,用户等加载(完整的URL语法:scheme:[// [user:password @] host [:port]] [/] path [?query] [#片段] ...在这里阅读更多内容:https://en.wikipedia.org/wiki/Uniform_Resource_Locator)。

一个完整的网址是一个以模式开头的网站(http / https / ftp等...)...但是(这很方便):如果您将使用相同的模式(保持您网站的安全评分很高),您可以将其与冒号一起跳过。

例如:在查看来自&#39; https://blah.net&#39;的网站,并尝试从谷歌加载资源(可能是分析)时,您可以将其引用为:

&#39; // google.com/path/to/whatever'

如果页面是通过https加载的话,这将使用https;如果不是,则使用http ...使您不必确定渲染页面时使用的方案。