Node Express API +前端

时间:2016-12-22 01:18:03

标签: node.js rest api express

我编写了我的第一个" 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可能会更好,但这是一个非常小的应用程序,我只想制作一个非常简单的前端。

1 个答案:

答案 0 :(得分:0)

保持简单。

如果您使用服务器端HTML呈现,则不需要REST API,只需删除它即可。如果是ajax前端或移动应用程序,则需要API。

如果您需要一种组合方法(服务器端呈现+移动应用程序或带有某些ajax的服务器端呈现),在第一步您需要将数据库查询代码隔离到一个单独的模块中(实际上总是一个好主意)并直接使用API​​和视图中的模块,避免服务器端视图中的API使用。

通过这种方式,您将消除过多的身份验证并使调试变得更加轻松,您的代码也将变得更加清晰,从而更易于维护。

另外,React并不复杂,我肯定会试一试:)