Как вызвать метод в файле маршрутов из общедоступного файла javascript?

0

Я играю с шаблоном, используя mongoose, express, node и mongodb. Есть информация, переданная от jade to mongo через формы, но я пытаюсь отправить HTML в mongo после того, как функция jQuery обработала его, но я даже не могу назвать app.post() вообще, не говоря уже о его app.post() что-нибудь.

В моем общедоступном /javascript.js файле:

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

И в моих маршрутах /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);      
});

...

Я понимаю, что это полный вопрос app.post(), но как мне просто вызвать app.post() из публичного JS файла? Все другие app.get и app.post вызываются с помощью jade:

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

А в маршрутах /posts.js: var text = req.param('text'); собирает информацию. Спасибо.

  • 0
    Разве эта строка уже не с ошибкой (почему фигурные скобки?)? $.post("post/529be9b307cc42a259000001", {element})
  • 0
    Да, это было, это была опечатка. Я починил это. Благодарю.
Теги:
post

2 ответа

1
Лучший ответ

app.post(), и все в ваших файлах маршрутов выполняется на сервере и, следовательно, недоступно для вашего Javascript на стороне клиента.

Когда вы выполняете запрос Ajax или отправляете форму POST, вы на самом деле делаете еще один запрос на сервер, как и запрос GET, который вы сделали для первоначальной загрузки страницы.

В этом случае, я считаю, что проблема $.post("post/529be9b307cc42a259000001",...) с относительным URL-адресом в $.post("post/529be9b307cc42a259000001",...), так как это запросит маршрут для yoursite.com/current_url/post/:id сайта yoursite.com/current_url/post/:id. Обратите внимание на разницу между action="/post/" в форме, которую вы создали в Jade и $.post("post/:id",...)?

Если представление, над которым вы сейчас работаете, находится в корневом каталоге (например, yoursite.com), то, что вы, вероятно, хотите, является абсолютным путем $.post("/post/529be9b307cc42a259000001",.. ) с ведущей косой чертой для маршрутизации вашего запроса POST на yoursite.com/post/:id

  • 0
    Спасибо за ответ. Я работаю с http://localhost:3000/post/529be9b307cc42a259000001 . Я полагаю, что отправляю что-то, потому что это POST /post/529be9b307cc42a259000001 302 11ms - 40b продолжает появляться в терминале. Тем не менее, когда я ищу монго, я не вижу новых изменений в БД. А в файле routs / posts.js не было вызвано console.logs. Можете ли вы вспомнить какую-нибудь функцию $ .post, которая будет где-то появляться? Я просто хочу доказательства прикосновения к стороне сервера со стороны клиента, как бы отчаянно это ни звучало.
  • 1
    если POST /post/## отображается в терминале nodejs, то запрос успешно достигает сервера. 302 «найдено». Я считаю, что @jwags правильно относится к loggedIn , пробовали ли вы просто app.post('/post/:id', function (req, res, next) { ...} ); ?
Показать ещё 4 комментария
0

Как упоминалось в ответе @Evan Cordeiro, вам нужно убедиться, что вы действительно делаете запрос на правильный URL. Другое дело, что функция "loggedIn" вызывает обратный вызов. Третье требование состоит в том, что вы использовали все правильные средние.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню