<commit_before><commit_msg>basic-auth<commit_after>---
layout: post
author: 166yuan
titile: express 实现数据验证
category: node.js
tag: node.js 
---
数据验证和请求过滤是我们在web开发中经常用到的。

那么nodejs怎样做到呢？

express 里自带了个middleware，叫basicAuth，就是用来做验证的。
基本demo，没有找到basic-auth模块？自己npm install！！这个不用教了吧。

{% highlight javascript linenos %}
    var basicAuth = require('basic-auth');
    var auth = function (req, res, next) {
        //定义验证失败函数
    function unauthorized(res) {
        res.set('WWW-Authenticate', 'Basic realm=Authorization Required');
        return res.send(401);
    };

    var user = basicAuth(req);

    //基础额非空限定，实用
    if (!user || !user.name || !user.pass) {
        return unauthorized(res);
    };
    //当我们希望用户登录名为foo，密码为<PASSWORD>时可以这样写。当然不需要就不用去限制了。
    if (user.name === 'foo' && user.pass === '<PASSWORD>') {
        return next();
    } else {
        return unauthorized(res);
        };
    };
        //映射使用的router,这里比用户登录
      app.get('/user/login', auth, function (req, res) {
        res.send(200, 'Authenticated');
     };
{% endhighlight %}

参考资料：[express.js 4.0 basic-auth](https://davidbeath.com/posts/expressjs-40-basicauth.html) 
{'fraction_non_alphanumeric': 0.15377932232841007, 'fraction_numerical': 0.011294526498696786, 'mean_word_length': 3.1588447653429603, 'pattern_counts': {'":': 0, '<': 5, '<?xml version=': 0, '>': 5, 'https://': 1, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '2970987', 'n_tokens_mistral': 487, 'n_tokens_neox': 497, 'n_words': 72}