【问题标题】:How do I call a method in a routes file from a public javascript file?如何从公共 javascript 文件调用路由文件中的方法?
【发布时间】:2013-12-19 20:42:10
【问题描述】:

我正在使用 mongoose、express、node 和 mongodb 使用模板。有信息通过表单从玉传递到 mongo,但我试图在 jQuery 函数操作它之后将 HTML 发送到 mongo,但我什至似乎根本无法调用 app.post(),更不用说给它提供任何东西了。

在我的 public/javascript.js 文件中:

var element =  $('.whatever').html();
$.post("post/529be9b307cc42a259000001", element) //The number is :id which is in the url

在我的 routes/posts.js 文件中:

module.exports = function (app) {


app.post("/post/:id", loggedIn, function (req, res, next) {
   var id = req.param('id');
   console.log("WHY DOESNT THIS MESSAGE SHOW UP IN TERMINAL??!") 
   console.log(element);      
});

...

我知道这是一个全新的问题,但我如何从公共 JS 文件中调用app.post()?所有其他app.getapp.post 方法都使用jade 成功调用,如下所示:

 form(method='post', action="/post/" + post.id)
    textarea(name='text')
    input(type='submit', value='Save')

在 routes/posts.js 中:var text = req.param('text'); 获取信息。谢谢你。

【问题讨论】:

  • 这一行不是已经失败并出现错误(为什么是大括号?)? $.post("post/529be9b307cc42a259000001", {element})
  • 是的,这是一个错字。我修好了它。谢谢。

标签: javascript jquery node.js mongodb post


【解决方案1】:

正如@Evan Cordeiro 的回答中所提到的,您需要确保您实际上是在向正确的 URL 发出请求。要确保的另一件事是“loggedIn”函数正在调用它的回调。第三个要求是你使用了所有正确的middlewares

【讨论】:

    【解决方案2】:

    app.post(),并且您的路由文件中的所有内容都在服务器上执行,因此您的客户端 Javascript 无法使用。

    当您执行 Ajax 请求或提交表单 POST 时,您实际上是在向服务器发出另一个请求,类似于您最初加载页面时所做的 GET 请求。

    在这种情况下,我相信您的问题出在$.post("post/529be9b307cc42a259000001", ...) 中的相对 URL 中,因为这将请求yoursite.com/current_url/post/:id 的路由。请注意您在 Jade 中创建的表单中的 action="/post/"$.post("post/:id",...) 之间的区别?

    除非您当前正在处理的视图位于根目录(即 yoursite.com),否则您可能想要的是一个 绝对路径 $.post("/post/529be9b307cc42a259000001", .. ) 带有前导斜杠以将您的 POST 请求路由到yoursite.com/post/:id

    【讨论】:

    • 感谢您的回答。我正在使用的视图是http://localhost:3000/post/529be9b307cc42a259000001。我相信我正在发布一些东西,因为这个POST /post/529be9b307cc42a259000001 302 11ms - 40b 不断在终端中弹出。然而,当我搜索 mongo 时,我发现数据库没有新的变化。并且在 routes/posts.js 文件中没有调用 console.logs r。你能想到任何会出现在某处的 $.post 函数吗?我只想要从客户端接触服务器端的证据,尽管听起来很绝望。
    • 如果 POST /post/## 出现在 nodejs 终端中,则请求成功到达服务器。 302 是“找到”。我相信@jwags 对loggedIn 的看法是正确的,你试过简单的app.post('/post/:id', function (req, res, next) { ...} ); 吗?
    • 收到 500 错误。谢谢你的尝试。我认为是时候重新开始了。您可以在不使用表单的情况下发布 HTML 吗?你知道任何例子吗?
    • 我认为 500 错误是一种改进。您使用的 AJAX 方法和表单 POST 是 html 页面中的两个选项。
    • 进展顺利。但是,如果没有看到代码的那部分,就很难对此发表评论。如果您仍然遇到困难,最好将其作为一个单独的问题发布,因为您已经完成了 POST 的工作。
    猜你喜欢
    • 2013-03-28
    • 2016-03-08
    • 1970-01-01
    • 1970-01-01
    • 2011-10-06
    • 1970-01-01
    • 1970-01-01
    • 2019-04-14
    • 1970-01-01
    相关资源
    最近更新 更多