Итак, я создаю это приложение для авторизации с использованием базового node.js + express. Поэтому, когда я беру значения (имя, адрес электронной почты и т. Д.) Со страницы регистрации, я проверяю значения с помощью экспресс-валидатора. Но я получаю каждое значение undefined (имя, адрес электронной почты и т. Д.), Когда форма страницы регистрации имеет enctype = 'multipart / form-data'. Но когда я удаляю enctype = 'multipart / form-data', значения приходят просто отлично !!
Так какое-нибудь решение для этого? Я только начинающий в Node.js.
(P.S. Мне нужно enctype = 'multipart / form-data', потому что я загружаю изображение профиля во время регистрации)
(P.S. В коде я удалил промежуточное ПО, чтобы показать минимальные коды только для register.jade и его маршрутов)
Я успешно зарегистрировался без использования enctype = 'multipart / form-data', но здесь я не могу загрузить изображение.
(P.S. Использование multer для загрузки файла)
. / App.js
var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var logger = require('morgan');
var expressValidator = require('express-validator');
var session = require("express-session");
var passport = require("passport");
var localStratergy = require("passport-local").Strategy;
var multer = require("multer");
var upload = multer({dest: './uploads'});
var flash = require("connect-flash");
var bcrypt = require("bcryptjs");
var moongo = require("mongodb");
var mongoose = require("mongoose");
var db = mongoose.connection;
var indexRouter = require('./routes/index');
var usersRouter = require('./routes/users');
const { check, validationResult } = require('express-validator');
var app = express();
app.use('/', indexRouter);
app.use('/users', usersRouter);
module.exports = app;
. / Маршруты / user.js * * 1016
var express = require('express');
var router = express.Router();
var multer = require("multer");
var bodyParser = require('body-parser');
var passport = require("passport");
var LocalStrategy = require("passport-local").Strategy;
var User = require('../models/user');
router.use(bodyParser.json());
router.use(bodyParser.urlencoded({ extended: false }));
var upload = multer({dest: './uploads'});
const {check, validationResult} = require('express-validator');
/* GET users listing. */
router.get('/', function(req, res, next) {
res.send('respond with a resource');
});
router.get('/register', function(req, res, next) {
res.render('register', {title: 'Register'});
});
router.post('/register', [
check('name' , 'Name Field is required').not().isEmpty(),
check('email', 'Email Field is required').not().isEmpty(),
check('email', 'Email Field is not valid').isEmail(),
check('username', 'Username Field is required').not().isEmpty(),
check('password', 'Password Field is required').not().isEmpty(),
check('password2', 'Passwords do not match').custom(
(value, {req, loc, path}) => {
if( value != req.body.password) {
throw new error("Passwords do not match");
} else{
return value;
}
})
], upload.single('profileimage'),function(req, res, next) {
var name = req.body.name;
var email = req.body.email;
var username = req.body.username;
var password = req.body.password;
var password2 = req.body.password2;
if(req.file){
console.log("Uploading");
var profileimage = req.file.filename;
} else{
console.log("No File Selected");
var profileimage = "noimage.jpg";
}
const errors = validationResult(req);
if(!errors.isEmpty()){
res.render('register', {
error: errors.array()
})
} else{
var newUser = new User({
name: name,
email: email,
username: username,
password: password,
profileimage: profileimage
});
User.createUser(newUser, function(err, user){
if(err) throw err;
console.log(user);
});
req.flash('success', 'You have now registered');
res.location('/');
res.redirect('/');
}
});
module.exports = router;
. / Просмотров / register.jade
extends layout
block content
h2.page-header Register
p Please Register Below
if error
each errors, i in error
div.alert.alert-danger #{errors.msg}
form(action="/users/register", method="post" enctype='multipart/form-data')
.form-group
label Name
input.form-control(name="name", type="text", placeholder="Enter Name", class="name")
.form-group
label Email
input.form-control(name="email", type="email", placeholder="Enter Email")
.form-group
label Username
input.form-control(name="username", type="text", placeholder="Enter Username")
.form-group
label Password
input.form-control(name="password", type="password", placeholder="Enter password")
.form-group
label Retype Password
input.form-control(name="password2", type="password", placeholder="Enter password again")
.form-group
label Profile Image
input.form-control(name="profileimage", type="File")
input.btn.btn-primary(type="submit", name="submit", value="Register")
Я ожидаю, что я добавлю enctype = 'multipart / form-data' для загрузки моего изображения и что остальным значениям не будет присвоено значение undefined, потому что тогда мой экспресс-валидатор не работает