非常相似的节点路由 - 任何更好的解决方案?

时间:2016-05-20 19:59:43

标签: node.js mongodb express mongoose

我有两个非常相似的路线(两个API结果)。因此,一个用于获取电子邮件地址,另一个用于获取用户名。我分别使用这两个,一个用于通过AJAX调用验证电子邮件地址,另一个用于验证用户名(基本上检查是否存在)。

在Node / Express / Mongoose中是否有任何方法可以专门检查两者(在单独的时间)而不必使用两种方法,它只是感觉如此多余?

用于检查电子邮件验证(尚不存在)

router.get('/:id', function(req, res) {
    var emailAddress = req.params.id;

    User.find({ 'emailAddress': emailAddress }, function (err, user) {
        if(!user) {
            res.statusCode = 404;

            return res.json({
                error: 'Not found'
            });
        }

        if (!err) {
            if (user[0]!=undefined) {
                return res.json(true);
            } else {
                return res.json({
                    error: 'Not found'
                });
            }
        } else {
            res.statusCode = 500;

            log.error('Internal error(%d): %s', res.statusCode, err.message);

            return res.json({
                error: 'Server error'
            });
        }
    });
});

用于检查用户名验证(尚不存在)

router.get('/username/:id', function(req, res) {
    var username = req.params.id;

    User.find({ 'username': username }, function (err, user) {
        if(!user) {
            res.statusCode = 404;

            return res.json({
                error: 'Not found'
            });
        }

        if (!err) {
            if (user[0]!=undefined) {
                return res.json(true);
            } else {
                return res.json({
                    error: 'Not found'
                });
            }
        } else {
            res.statusCode = 500;

            log.error('Internal error(%d): %s', res.statusCode, err.message);

            return res.json({
                error: 'Server error'
            });
        }
    });
});

只是为两个结果返回布尔值。当然有比这更好的方法吗?有这么多重复的代码令人沮丧。

编辑:仍在研究,但也许我可以使用User.find()并传递我想要的东西,但是从API传递到用户模型方面,这怎么可能?

1 个答案:

答案 0 :(得分:0)

将它们拆分为可重复使用的单位并在路线中使用它们。

class ExpiredSpider(BaseSpider):

    name = "expired"
    allowed_domains = ["example.com"]
    start_urls = ['https://www.expireddomains.net/deleted-com-domains/']

    def parse(self, response):
        log.msg('parse(%s)' % response.url, level = log.DEBUG)
        rows = response.xpath('//table[@class="base1"]/tbody/tr')
        for row in rows:
            item = DomainItem()
            item['domain'] = row.xpath('td[1]/text()').extract()
            item['bl'] = row.xpath('td[2]/text()').extract()
            yield item