我是 JavaScript 新手,我有一項任務是將電子郵件輸入從表單發布到節點服務器,一切正常,但我應該實作此功能:
當電子郵件是 [email protected] 時,服務器以 422 回應狀態代碼和有效負載,其中包含有關錯誤的資訊。使用瀏覽器開發人員工具檢查此場景的回應。使用 window.alert() 在瀏覽器中顯示錯誤訊息。
我創建了一個 customException,它在控制臺中給了我錯誤,但服務器仍然以 200 狀態代碼回應,但據我所知,它應該給出一個錯誤并且帖子不應該作業。如何做這個任務,我有不知道..?
獲取功能:
import { validateEmail } from './email-validator.js'
export const sendSubscribe = (emailInput) => {
const isValidEmail = validateEmail(emailInput)
if (isValidEmail === true) {
sendData(emailInput);
// if (emailInput === '[email protected]'){
// throw new CustomException('422');
// }
}
}
const sendHttpRequest = (method, url, data) => {
return fetch(url, {
method: method,
body: JSON.stringify(data),
headers: data ? {
'Content-Type': 'application/json'
} : {}
}).then(response => {
if (response.status >= 400) {
return response.json().then(errResData => {
const error = new Error('Something went wrong!');
error.data = errResData;
throw error;
});
}
return response.json();
});
};
const sendData = (emailInput) => {
sendHttpRequest('POST', 'http://localhost:8080/subscribe', {
email: emailInput
}).then(responseData => {
console.log(responseData);
}).catch(err => {
console.log(err, err.data);
});
}
function CustomException(message) {
const error = new Error(message);
error.code = "422";
window.alert('Forbidden email,please change it!')
return error;
}
CustomException.prototype = Object.create(Error.prototype);
驗證功能:
const VALID_EMAIL_ENDINGS = ['gmail.com', 'outlook.com', 'yandex.ru']
export const validateEmail = (email) => !!VALID_EMAIL_ENDINGS.some(v => email.includes(v))
export { VALID_EMAIL_ENDINGS as validEnding }
請幫忙。提前致謝!
uj5u.com熱心網友回復:
這樣的事情應該作業:
服務器代碼:
簡化驗證功能。
export const isValid = (email) => {
if (email === '[email protected]') {
return false
}
return true
}
然后在你的路線上,像這樣,假設 expressjs 在后面。
app.post('/subscribe', (req, res, next) => {
const email = req.body.email
if (!isValid(email)) {
return res.status(433).send('Email is forbidden')
}
return res.status(200).send('Success')
})
在您的前端,您可以使用電子郵件有效負載發布到 /subscribe
const sendHttpRequest = (method, url, data) => {
return fetch(url, {
method: method,
body: JSON.stringify(data),
headers: data ? {
'Content-Type': 'application/json'
} : {}
})
.then(response => response.json())
};
在您的 sendData 中,您可以捕獲錯誤,就像您正在做的那樣
const sendData = (emailInput) => {
sendHttpRequest('POST', 'http://localhost:8080/subscribe', {
email: emailInput
}).then(responseData => {
console.log(responseData);
}).catch(err => {
console.log(err); // Email is forbidden
window.alert('Boo!')
});
}
旁注:在大多數情況下,應避免在 javascript 中進行原型設計。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/383621.html
標籤:javascript 节点.js 服务器 拿来
