我编写了我的第一个" solo" nodejs webapp。它基于之前的应用程序(我通过遵循某种教程/课程编写),这是一个Express REST API,允许您添加/删除/更新/列出Todo列表。我还使用jwt / bcrypt实现了用户身份验证。所有这些都存储在MongoDB数据库中。
另请注意,所有端点都返回JSON。
我现在正在尝试为应用添加前端。 API端点位于/api/endpoint1
,/api/endpoint2
等,视图在/view1
,/view2
等处呈现。我是故意这样做的,所以我可以从API中获取普通JSON中的响应,或者在呈现的网页中显示它。
我开始使用jQuery的ajax进行调用,但我意识到这不是我想要这样做的方式。我删除了网页上的所有js脚本,并开始直接在服务器上工作,使用从api获取的信息呈现页面。
这就是我现在所拥有的:
server.js(主文件)[样本]
// 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 +前端节点应用程序的好方法/实践吗?
此外,我使用了两次auth中间件:在视图和API本身。我想这可以吗?
使用React / Angular可能会更好,但这是一个非常小的应用程序,我只想制作一个非常简单的前端。
答案 0 :(得分:0)
保持简单。
如果您使用服务器端HTML呈现,则不需要REST API,只需删除它即可。如果是ajax前端或移动应用程序,则需要API。
如果您需要一种组合方法(服务器端呈现+移动应用程序或带有某些ajax的服务器端呈现),在第一步您需要将数据库查询代码隔离到一个单独的模块中(实际上总是一个好主意)并直接使用API和视图中的模块,避免服务器端视图中的API使用。
通过这种方式,您将消除过多的身份验证并使调试变得更加轻松,您的代码也将变得更加清晰,从而更易于维护。
另外,React并不复杂,我肯定会试一试:)