gpt4 book ai didi

javascript - 通过在 Node 中发出 http 请求来验证表单输入

转载 作者:行者123 更新时间:2023-12-03 12:43:45 25 4
gpt4 key购买 nike

我有一个表单,其提交按钮调用

exports.postUpdateProfile = function(req, res, next) {
User.findById(req.user.id, function(err, user) {
if (err) return next(err);
user.email = req.body.email || '';
user.profile.name = req.body.name || '';
//check req.body.rescueTimeKey by making http request,
//and parsing response to ensure the key is good
user.profile.rescueTimeKey = req.body.rescueTimeKey;

user.save(function(err) {
if (err) return next(err);
req.flash('success', { msg: 'Profile information updated.' });
res.redirect('/account');
});
});
};

我想在保存配置文件之前确保 req.body.rescueTimeKey 有效,我尝试创建一个模块来执行该检查...

//rescue-time.js module

var request = require('request');
exports.validKey = function(key){
var options = {
url: 'https://www.rescuetime.com/anapi/data?key=' + key,
json: true
};

var cb = function callback(error, response, body){
if(error || body.error){
//Key is bad, flash message and don't allow save
}
//key is good, save profile
};
request(options, cb);
}
正如您可能想象的那样,我没有完全掌握在进行异步调用时使用回调的 Node 样式,非常感谢任何重新组织此代码的帮助。

最佳答案

您需要做的是向您的 validKey 函数添加一个额外的参数以接受回调,这就是我们将在请求后使用的回调。

所以你的rescue-time.js看起来像这样:

// rescue-time.js
var request = require('request');

exports.validKey = function(key, cb) {
var options = {
url: 'https://www.rescuetime.com/anapi/data?key=' + key,
json: true
};

request(options, function (error, response, body) {
if(error || body.error){
cb(false)
}
else {
cb(true);
}
});
};``

如果 key 有效,我们将返回 truefalse 的 bool 结果。

在 Controller 中,您需要类似以下内容:

var rescueTime = require('./path/to/rescue-time.js');

exports.postUpdateProfile = function(req, res, next) {
User.findById(req.user.id, function(err, user) {
if (err) return next(err);
user.email = req.body.email || '';
user.profile.name = req.body.name || '';
//check req.body.rescueTimeKey by making http request,
//and parsing response to ensure the key is good
user.profile.rescueTimeKey = req.body.rescueTimeKey;

// We're sending in a callback function that will have a "valid" result as a second arg
rescueTime.validKey(user.profile.rescueTimeKey, function(valid) {
// check if valid returned true or false and act accordingly
if (!valid) {
req.flash('error', 'invalid rescueTime key');
res.redirect('/account');
}
else {
user.save(function(err) {
if (err) return next(err);
req.flash('success', { msg: 'Profile information updated.' });
res.redirect('/account');
});
}
});
});
};

请记住,此代码根本没有经过测试,而只是一个示例,说明您需要做什么才能获得所需的结果。

关于javascript - 通过在 Node 中发出 http 请求来验证表单输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23418411/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com