小编Jes*_*ess的帖子

如何在函数完成之前使用promises或完成ajax请求?

我有以下功能来检查用户会话,看他们是否是员工.现在,我知道有更好的方法可以做到这一点,但我正在尝试制作一个与论坛软件相关的简单应用程序.

function isStaff(callback) {
    $.ajax({
        url: url
    }).done(function(data) {
        var session = $.parseJSON(data);
        if (session.is_staff === 1) {
            callback(true);
        } else {
            callback(false);
        }

    });
}
Run Code Online (Sandbox Code Playgroud)

假设编辑"post"(Handlebars)时,我正在使用此函数.

function compilePost(post) {
    var source = $('#feed-item-template').html();
    var template = Handlebars.compile(source);
    var context = {
        id: post.id,
        content: post.text,
        author: post.author,
        date: $.timeago(post.date),
        staff: function() {
            isStaff(function(response) {
                return response;
            });
        }
    }
    var html= template(context);
    return html;
}
Run Code Online (Sandbox Code Playgroud)

这里的问题是,检查用户是否是工作人员的请求直到运行该函数之后才完成请求.

我知道Promise是async的替代方法:false,在请求发出的地方,响应在函数完成之前返回.

但我不知道如何将其转化为承诺.我试图学习它,但我坚持这个概念.谁可以给我解释一下这个?谢谢.

javascript jquery promise

10
推荐指数
1
解决办法
1万
查看次数

使用express-validator检查输入是否是用户名或电子邮件

我正在尝试验证登录请求,它接受用户名(可以是电子邮件或用户名)和密码。我如何使用 Express-Validator 来做到这一点?

我正在阅读文档,验证器的工作方式是您必须将数据作为第二个参数传递。我不确定如何检查它是否也是用户名或密码。

router.post("/", (req, res) => {
    const { nickname, password } = req.body;
    // Create a new object based on email or username
    const login = {};
    if (nickname.indexOf('@') === -1) {
        login.nickname = nickname;
    } else {
        login.email = nickname;
    }
    login.password = password;
    // JWT Sign...
});
Run Code Online (Sandbox Code Playgroud)

通过验证器,我还想检查它是否是

  • 用户名或电子邮件
  • 如果是电子邮件,请使用 isEmail() 验证器确保它是真实的电子邮件
  • 如果是用户名,请确保它超过三个字符并且有一个实际的用户名。

试图

router.post("/", (req, res) => {
    const { nickname, password } = req.body;
    // Create a new object based on email or …
Run Code Online (Sandbox Code Playgroud)

node.js express express-validator

0
推荐指数
1
解决办法
2万
查看次数