не может установить заголовок при использовании экспресс-рендеринга hbs - PullRequest
0 голосов
/ 20 мая 2018

Я пытаюсь вставить токен в заголовок ответа почтового маршрута непосредственно перед визуализацией view-engine-hadlebars.

Это почтовый маршрут, в котором я хочу настроить хедер:

app.post("/signup", (req, res) => {


let email = req.body.usremail;
let password = req.body.password;


var user = new User({
    email,
    password
})
user.save().then(() => {
    return user.generateAuthToken();
}).then((token)=>{


    res.set('x-auth', token);
    res.render("project.hbs", {
        paragraph: `Welcome ${email}. What would you like to do?`,
        button1: "New poll",
        button2: "See your polls",
        button3: "See all polls",
        link1: "/newpoll",
        link2: "/yourpolls",
        link3: "/allpolls",
        pie: true,
        two: true
    })
}, (e) => {
    console.log(e.message);
})

})

Это маршрут получения, в который я хочу получить заголовок:

loginRouter.get("/newpoll", authenticate, (req, res) => {
console.log("newpoll/get:",req.header("x-auth"));

   res.render("project.hbs", {
    paragraph: `Enter your poll question and answers then submit`,
    quessubmit: true,
    method: "post",
    action: "/newpoll",
    ques: true
})
})

маршрут получения говорит, что он не определен.Любые мысли очень ценятся.

1 Ответ

0 голосов
/ 20 мая 2018

Это не то, как работают заголовки.Когда вы делаете: res.set('x-auth', token); на /signup маршруте, вы устанавливаете заголовок ответа, этот заголовок будет отправляться клиенту, но не будет сохраняться для других запросов.

Когда пользователь нажимает нассылка идет на /newpoll. Невозможно отправить пользовательский заголовок HTTP через элемент a, поэтому ваш код не будет работать.

То, что вы ищете, этофайл cookie, который будет установлен на /signup и может быть получен по любому другому маршруту.

const cookieParser = require('cookie-parser');
const express = require('express');

const app = express();
app.use(cookieParser());

app.post("/signup", (req, res) => {
    /* ... */
    res.cookie('x-auth', token);
    /* .. */
});

loginRouter.get("/newpoll", authenticate, (req, res) => {
    console.log("newpoll/get:",req.cookies["x-auth"]);
});

Ознакомьтесь с документацией res.cookie , чтобы узнать, как установить безопасныйoptions.

ПРИМЕЧАНИЕ: Я не знаю, что делает ваш метод authenticate или как вы аутентифицируете пользователей, но вам, вероятно, следует проверить, установлен ли x-auth cookie или нетесть.

...