У меня есть код, который отвечает за регистрацию формы сообщения на странице. Каждый раз, когда он проходит проверку, и, судя по всему (проверено с помощью console.logs), он переходит к коду, который должен сохранить нового пользователя. Однако мое приложение постоянно обновляется и не останавливается. Код в основном скопирован и вставлен из учебника Брэда Траверси, поэтому нет причин, по которым он не должен работать. Я подумал, что, возможно, я не подключен к mongoDB, но оператор console.log, который проходит, говорит об обратном.
users. js (обработчик почтовых запросов)
router.post('/register', (req, res) => {
const {
name,
email,
password,
password2
} = req.body;
let errors = [];
if (!name || !email || !password || !password2) {
errors.push({
msg: 'Please enter all fields'
});
}
if (password != password2) {
errors.push({
msg: 'Passwords do not match'
});
}
if (password.length < 6) {
errors.push({
msg: 'Password must be at least 6 characters'
});
}
if (errors.length > 0) {
res.render('register', {
errors,
name,
email,
password,
password2
});
} else {
User.findOne({
email: email
}).then(user => {
if (user) {
errors.push({
msg: 'Email already exists'
});
res.render('register', {
errors,
name,
email,
password,
password2
});
} else {
const newUser = new User({
name,
email,
password
});
bcrypt.genSalt(10, (err, salt) => {
bcrypt.hash(newUser.password, salt, (err, hash) => {
if (err) throw err;
newUser.password = hash;
newUser
.save()
.then(user => {
req.flash(
'success_msg',
'You are now registered and can log in'
);
res.redirect('/users/login');
})
.catch(err => console.log(err));
});
});
}
});
}
});
app. js (удалил ключ URI по очевидным причинам. Mon goose должен подключаться, когда выполняется инструкция console.log, но иногда медленно)
const express = require('express');
const expressLayouts = require('express-ejs-layouts');
const mongoose = require('mongoose');
const app = express();
const port = process.env.PORT || 8000;
// db config
const db = require('./config/keys').mongoURI;
// connect to mongo
mongoose.connect('', {
useNewUrlParser: true,
useUnifiedTopology: true
}, () => console.log('MongoDB Connected...'));
// ejs
app.use(expressLayouts);
app.set('view engine', 'ejs');
// body parser
app.use(express.urlencoded({
extended: false
}))
// routes
app.use('/', require('./routes/index'));
app.use('/users', require('./routes/users'));
app.listen(port, console.log(`Listening on port ${port}`));
user. js (моя схема модели пользователя)
const mongoose = require('mongoose');
const userSchema = new mongoose.Schema({
fullName: {
type: String,
required: true
},
email: {
type: String,
required: true
},
password: {
type: String,
required: true
},
date: {
type: Date,
default: Date.now
}
});
const User = mongoose.model('User', userSchema);
module.exports = User;
РЕДАКТИРОВАТЬ: я не получаю этот код ошибки в моем терминале, но он исчезает, если я обновляю sh сервер
events.js:287
throw er; // Unhandled 'error' event
^
Error: listen EADDRINUSE: address already in use :::8000
at Server.setupListenHandle [as _listen2] (net.js:1313:16)
at listenInCluster (net.js:1361:12)
at Server.listen (net.js:1449:7)
at Function.listen (C:\Users\robolowski\Desktop\portfolio\ExpressLoginApp\node_modules\express\lib\application.js:618:24)
at Object.<anonymous> (C:\Users\robolowski\Desktop\portfolio\ExpressLoginApp\app.js:33:5)
at Module._compile (internal/modules/cjs/loader.js:1133:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1153:10)
at Module.load (internal/modules/cjs/loader.js:977:32)
at Function.Module._load (internal/modules/cjs/loader.js:877:14)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:74:12)
at internal/main/run_main_module.js:18:47
Emitted 'error' event on Server instance at:
at emitErrorNT (net.js:1340:8)
at processTicksAndRejections (internal/process/task_queues.js:84:21) {
code: 'EADDRINUSE',
errno: 'EADDRINUSE',
syscall: 'listen',
address: '::',
port: 8000
}