Так что я новичок в программировании и недавно начал обучение бэкэнд. Хорошо, недавно я столкнулся с проблемой с почтальником, делая запрос на почту. Поэтому, когда я написал контроллер для регистрации пользователя, я использовал Postman для тестирования, и выполнить простой запрос на почту с помощью Form-Data , которые состоят из таких полей, как имя пользователя, электронная почта, полное имя, аватар, коврек, пароль. И это сработало совершенно нормально, и пользователь был зарегистрирован в базе данных. поля имени пользователя, пароль. Он начал бросать ошибку, как не может прочитать свойства неопределенных. После некоторой отладки я узнал, что тело в запросе имеет пустой объект, и поэтому я получаю эту ошибку. Я попытался отправить необработанные данные из почтальона, но это тоже не сработало, но, наконец, когда я попробовал с XWW-form-urlencoded это сработало.
Так что мой вопрос Почему это работало с X-WWW-Form-Urlencode, а не с формой-датой и сырой? А также почему я получал пустой объект, пока отправлял данные о дате форм и необработанных.const registerUser = asyncHandler( async (req, res) => {
const {fullName, email, username, password} = req.body
if ([fullName, email, username, password].some(field => field?.trim() === "")) { // we're using optional chaining to avoid running trim() on null or undefined field
throw new ApiError(400, "All fields are required!") // Checking if all the fields are non-empty
} else if (!email?.includes("@") || !email?.includes(".")) { // Checking if email is vaild or not
throw new ApiError(400, "Please enter a vaild email") // Its not a hard check for email
}
const existedUsername = await User.findOne({username})
const existedEmail = await User.findOne({username})
if (existedUsername) {
throw new ApiError(409, "Username already exist")
} else if (existedEmail) {
throw new ApiError(409, "Email is already linked to a different account")
}
let avatarLocalPath;
if (req.files && Array.isArray(req.files.avatar) && req.files.avatar.length > 0) {
avatarLocalPath = req.files?.avatar[0]?.path; // multer gives us the access of .files field in the request
}
let coverImageLocalPath; // manually checking if coverImage is provided or not before chaining
if (req.files && Array.isArray(req.files.coverImage) && req.files.coverImage.length > 0) {
coverImageLocalPath = req.files.coverImage[0].path;
}
if (!avatarLocalPath) {
throw new ApiError(400, "Avatar Local path is required!")
}
const avatar = await uploadOnCloudinary(avatarLocalPath);
// console.log(avatar)
const coverImage = await uploadOnCloudinary(coverImageLocalPath);
if (!avatar) {
throw new ApiError(400, "Avatar file is required")
}
const user = await User.create({
fullName,
avatar: avatar.url,
coverImage: coverImage?.url || "",
username: username.toLowerCase(),
email,
password,
})
const createdUser = await User.findById(user._id).select("-password -refreshToken");
if (!createdUser) {
throw new ApiError(500, "Something went wrong while registering the user")
}
return res.status(201).json(
new ApiResponse(200, createdUser, "User registered Successfully")
)
})
< /code>
Вот и логинзатор контроллер -< /p>
const loginUser = asyncHandler( async (req, res) => {
const {email, username, password} = req.body
if (!(username || email)) {
throw new ApiError(400, "Username or Email is required to Login")
}
const user = await User.findOne({
$or: [{username}, {email}]
})
if (!user) {
throw new ApiError(404, "User does not exist");
}
const isPasswordValid = await user.isPasswordCorrect(password);
if (!isPasswordValid) {
throw new ApiError(401, "Invaild user password");
}
const {accessToken, refreshToken} = await generateAccessAndRefreshTokens(user._id);
const loggedInUser = await User.findById(user._id).select("-password -refreshToken");
const options = {
httpOnly: true,
secure: true
}
return res
.status(200)
.cookie("accessToken", accessToken, options)
.cookie("refreshToken", refreshToken, options)
.json(new ApiResponse(
200,
{
user: loggedInUser,
accessToken,
refreshToken
},
"User logged In Successfully")
)
})
Подробнее здесь: https://stackoverflow.com/questions/794 ... urlencoded
Разница между данными формы и x www form urlencoded ⇐ Javascript
Форум по Javascript
-
Anonymous
1740334093
Anonymous
Так что я новичок в программировании и недавно начал обучение бэкэнд. Хорошо, недавно я столкнулся с проблемой с почтальником, делая запрос на почту. Поэтому, когда я написал контроллер для регистрации пользователя, я использовал Postman для тестирования, и выполнить простой запрос на почту с помощью Form-Data , которые состоят из таких полей, как имя пользователя, электронная почта, полное имя, аватар, коврек, пароль. И это сработало совершенно нормально, и пользователь был зарегистрирован в базе данных. поля имени пользователя, пароль. Он начал бросать ошибку, как не может прочитать свойства неопределенных. После некоторой отладки я узнал, что тело в запросе имеет пустой объект, и поэтому я получаю эту ошибку. Я попытался отправить необработанные данные из почтальона, но это тоже не сработало, но, наконец, когда я попробовал с XWW-form-urlencoded это сработало.
Так что мой вопрос Почему это работало с X-WWW-Form-Urlencode, а не с формой-датой и сырой? А также почему я получал пустой объект, пока отправлял данные о дате форм и необработанных.const registerUser = asyncHandler( async (req, res) => {
const {fullName, email, username, password} = req.body
if ([fullName, email, username, password].some(field => field?.trim() === "")) { // we're using optional chaining to avoid running trim() on null or undefined field
throw new ApiError(400, "All fields are required!") // Checking if all the fields are non-empty
} else if (!email?.includes("@") || !email?.includes(".")) { // Checking if email is vaild or not
throw new ApiError(400, "Please enter a vaild email") // Its not a hard check for email
}
const existedUsername = await User.findOne({username})
const existedEmail = await User.findOne({username})
if (existedUsername) {
throw new ApiError(409, "Username already exist")
} else if (existedEmail) {
throw new ApiError(409, "Email is already linked to a different account")
}
let avatarLocalPath;
if (req.files && Array.isArray(req.files.avatar) && req.files.avatar.length > 0) {
avatarLocalPath = req.files?.avatar[0]?.path; // multer gives us the access of .files field in the request
}
let coverImageLocalPath; // manually checking if coverImage is provided or not before chaining
if (req.files && Array.isArray(req.files.coverImage) && req.files.coverImage.length > 0) {
coverImageLocalPath = req.files.coverImage[0].path;
}
if (!avatarLocalPath) {
throw new ApiError(400, "Avatar Local path is required!")
}
const avatar = await uploadOnCloudinary(avatarLocalPath);
// console.log(avatar)
const coverImage = await uploadOnCloudinary(coverImageLocalPath);
if (!avatar) {
throw new ApiError(400, "Avatar file is required")
}
const user = await User.create({
fullName,
avatar: avatar.url,
coverImage: coverImage?.url || "",
username: username.toLowerCase(),
email,
password,
})
const createdUser = await User.findById(user._id).select("-password -refreshToken");
if (!createdUser) {
throw new ApiError(500, "Something went wrong while registering the user")
}
return res.status(201).json(
new ApiResponse(200, createdUser, "User registered Successfully")
)
})
< /code>
Вот и логинзатор контроллер -< /p>
const loginUser = asyncHandler( async (req, res) => {
const {email, username, password} = req.body
if (!(username || email)) {
throw new ApiError(400, "Username or Email is required to Login")
}
const user = await User.findOne({
$or: [{username}, {email}]
})
if (!user) {
throw new ApiError(404, "User does not exist");
}
const isPasswordValid = await user.isPasswordCorrect(password);
if (!isPasswordValid) {
throw new ApiError(401, "Invaild user password");
}
const {accessToken, refreshToken} = await generateAccessAndRefreshTokens(user._id);
const loggedInUser = await User.findById(user._id).select("-password -refreshToken");
const options = {
httpOnly: true,
secure: true
}
return res
.status(200)
.cookie("accessToken", accessToken, options)
.cookie("refreshToken", refreshToken, options)
.json(new ApiResponse(
200,
{
user: loggedInUser,
accessToken,
refreshToken
},
"User logged In Successfully")
)
})
Подробнее здесь: [url]https://stackoverflow.com/questions/79461724/difference-between-form-data-and-x-www-form-urlencoded[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия