gpt4 book ai didi

javascript - Node/Express - 使用 API JSON 响应(服务器端)渲染应用程序

转载 作者:太空宇宙 更新时间:2023-11-04 01:32:45 25 4
gpt4 key购买 nike

序言:我是网络开发新手,所以这对你们这些老手来说可能是一个非常基本的问题。

我正在为这个基本应用程序使用 MVC 架构模式。我有模型 (MongoDB)、 View (Express Handlebars) 和 Controller (接受 req、res、next 并返回 Promise 的函数(.then > 返回 JSON,.catch > 返回错误)。我将把路径 reqs 路由到 Controller 中相应的 api 端点。

当我纯粹从事以 JSON 为资源的 API 调用时,这是有道理的(对吧?)。但是,我还想调用这些 api 端点 > 获取它们的 res.json > 并使用它通过 Handlebars 渲染我的 HTML。实现这一目标的最佳方法是什么?我可以创建相同的 Controller ,而不是 JSON,我可以进行渲染(“html view”,res.json)。但这似乎是我再次重复相同的代码,只是为了更改如何处理响应(返回 JSON 或渲染 JSON)。

希望我说得有道理,如果没有,请告诉我。请指教。

附:尝试为我做 ELI5 的事情。 (:

编辑:

//Model Example
const Schema = require('mongoose').Schema;

const testSchema = new Schema({
testText: { type: String, required: true },
});

const Test = mongoose.model('Test', testSchema);

module.exports = Test;


//Controller Example
const model = require('../models');

module.exports = {
getAll: function(req, res, next) {
model.Test.find(req.query)
.then((testItems) => {
!testItems.length
? res.status(404).json({ message: 'No Test Item Found' })
: res.status(200).json(testItems);
})
.catch((err) => next(err));
},
};

//Route Example
const router = require('express').Router(),
controller = require('../controllers');

router.get('/', controller.getAll);

module.exports = router;

我希望端点返回 JSON,并以某种方式管理是渲染(如果请求来自浏览器)还是保留 JSON(例如,如果从 Postman 或 API Web URL 调用),而无需重复代码。我试图不创建两个端点,99%的代码是相同的,唯一的区别是 .then > res.status(200).json(testItems);与 .then > res.status(200).render('testPage', { testItems}).

最佳答案

对于 postman ,您可以检查 req.headers 中是否存在 postman-token,然后您可以进行相应的渲染,如下所示:

req.headers['postman-token'] ? res.json({ /* json */ }) : render('view', {/ * json */});

关于javascript - Node/Express - 使用 API JSON 响应(服务器端)渲染应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55562314/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com