Node Express API +前端

我正在编写我的第一个“solo”nodejs webapp。 它基于以前的应用程序(我按照某种教程/课程编码),这是一个Express REST API,允许您添加/删除/更新/列出待办事项列表。 我也使用jwt / bcrypt实现了用户authentication。 所有这些都存储在MongoDB数据库中。

还要注意所有的端点都返回JSON。

我现在正试图添加一个前端的应用程序。 API端点在/api/endpoint1/api/endpoint2等等,视图在/view1/view2等上呈现。我这样做的目的是让我可以从普通的JSON得到响应API,或者在呈现的网页中显示它。

我开始使用jQuery的ajax来打电话,但我意识到这不是我想这样做的方式。 我删除了我的网页上的所有js脚本,并开始直接在服务器上工作,渲染从api获取的信息页面。

这是我现在所拥有的:

server.js(主文件)[sample]

 // RENDER 'GET TODOs' app.get('/todos', authenticate, (req, res) => { let auth = req.cookies['x-auth']; request({ url: 'http://localhost:3000/api/todos', headers: { 'x-auth': auth } }, function (error, response, body) { if (error || response.statusCode !== 200) { return res.status(response.statusCode || 500).send('Error'); // TODO } let bodyJSON = JSON.parse(body); res.render('todos', { title: 'Todo App - Todos', todos: bodyJSON.todos }); }); }); // API endpoint to 'GET TODOs' (JSON) app.get('/api/todos', authenticate, (req, res) => { Todo.find({ _creator: req.user._id }).then((todos) => { res.send({todos}); }, (err) => { res.status(400).send(err); }); }); 

我不知道为什么,但是这一切对我来说都很奇怪。 我想知道如果这是我应该这样做。 我的意思是,这是制作API +前端节点应用程序的好方法吗?

另外,我使用了一个authentication中间件两次:在视图和API本身。 我猜这样可以吗?

使用React / Angular可能会更好,但这是一个很小的应用程序,我只是想做一个非常简单的前端。

只是保持简单。

如果您使用服务器端HTML呈现,则不需要REST API,只需将其删除即可。 在ajax前端或移动应用程序的情况下,您需要一个API。

如果你需要一个综合的方法(服务器端渲染+移动应用程序或服务器端渲染与一些AJAX),在第一步,你想孤立你的数据库查询代码到一个单独的模块(这实际上总是一个好主意)并直接从您的视图和视图中使用该模块,避免从服务器端视图中使用API​​。

这样你将消除过多的authentication,并使debugging更容易,你的代码也将变得更清洁,从而更易于维护。

另外,React不是那么复杂,我肯定会给它一个:)