Как сделать экспресс-возврат JSON после шаблона res.render EJS? - PullRequest
0 голосов
/ 07 октября 2019

Мне нужно отрисовать страницу и отправить json ответ. Я мог сделать одно или другое, но не оба. Вот что у меня есть:

app.get('/', (req, res) => {
  db.collection('myDatabase').find().toArray((err, result) => {
    if (err) return console.log(err)
    res.render('mytemplate.ejs', {myDatabase: result})
  })
})

Приведенный выше код корректно отображает шаблон, но не возвращает никакого ответа JSON.

Однако для рендеринга и получения ответа 200, который я пробовал:

what I tried

Вот что возвращается:

{"htmlContent": {}, "status": "200"}

Это означает, что он возвращает json, но не шаблон ejs myTemplate.ejs

1 Ответ

0 голосов
/ 07 октября 2019

ОБНОВЛЕНИЕ: я обновил свой ответ, чтобы проверить Accept header. Браузер не отправляет application / json, поэтому код выдает html, для ваших вызовов API вы отправляете Accept: application/json, а затем возвращает json

let ejs = require('ejs');

app.get('/', (req, res) => {
  db.collection('myDatabase').find().toArray((err, result) => {
    if (err) return console.log(err)

       if(req.header('Accept').includes('application/json')){
        res.send(result);
       }else{
        res.render('mytemplate.ejs', {myDatabase: result});
       }
  })
})
...