newuser
это не модель, это экземпляр SomeModel
- списка методов здесь
findOne
это метод модели - SomeModel
спискаметодов здесь
, поэтому замените: newuser.findOne
на SomeModel.findOne
Я переписал общий код для лучшей читабельности, асинхронных / ожидающих функций, с примерами деструктуризации объектов и т. д.практики:
'use strict';
const path = require('path');
const http = require('http');
const express = require('express');
const socketIO = require('socket.io');
const bodyParser = require('body-parser');
const consolidate = require('consolidate');
// DB connection
const mongoose = require('mongoose');
const connectionString = 'mongodb://localhost/my_database';
mongoose.Promise = global.Promise;
mongoose
.connect(connectionString, {useNewUrlParser: true})
.then(() => {
console.log('Connection to database established');
})
.catch(error => {
console.error('MongoDB connection error:', error.message);
process.exit(-1);
});
// End of: DB connection
// Defining DB schemas and models
const Schema = mongoose.Schema;
const UserSchema = new Schema({
username: String,
password: String
});
const User = mongoose.model('User', UserSchema);
// End of: Defining DB schemas and models
// Initial app configuration
const app = express();
const server = http.Server(app);
const io = socketIO(server);
app.engine('html', consolidate.mustache);
app.set('view engine', 'html');
app.set('views', path.join(__dirname, 'views'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: true}));
app.use(express.static('public'));
// End of: Initial app configuration
// App route handlers
app.get(
'/',
(req, res) => {
res.render('mainpage');
});
app.get(
'/reg',
(req, res) => {
res.render('reg');
});
app.post(
'/reg',
async (req, res) => {
try {
const {username, password} = req.body;
const user = await User.create({username, password});
console.log('Created user:', user);
res.sendFile(path.join(__dirname, 'views', 'mainpage.html'));
}
catch (error) {
res.status(500).send(error.message);
}
});
app.post(
'/login',
async (req, res) => {
try {
const {username, password} = req.body;
const user = await User.findOne({username, password}).select('-password').lean();
if(!user) {
res.send('User: ' + username +' not registered');
return;
}
res.send('hey ' + username);
}
catch (error) {
res.status(500).send(error.message);
}
});
// End of: App route handlers
// Binding http listener to port
server.listen('8080');
Обратите внимание: lean
это метод запроса здесь руководство
Исправить Вашу форму входа:
<form action="/login" method="POST">
<input type="text" placeholder="username" name="username">
<input type="password" placeholder="pass" name="password">
<button type="submit">Login</button> <br/>
or <strong><a href="/reg">Sign Up</a></strong>
</form>
PS Написатьв комментариях, если что-то пойдет не так.