#html #node.js #database #mongodb #express
#HTML #node.js #База данных #mongodb #выразить
Вопрос:
Я создал REST full API, который работает так, как я ожидал бы, если бы я запускал Postman. Я запускаю тест из index.js файл, в котором будут сохранены маршруты, указанные в файле ниже.
const config = require('config');
const mongoose = require('mongoose');
const users = require('./routes/users');
const auth = require('./routes/auth');
const express = require('express');
const app = express();
//mongoose.set();
if (!config.get('jwtPrivateKey'))
{
console.log('Fatal ERRORR: jwtPrivateKey key is not defined')
process.exit(1);
}
mongoose.connect(uri ,{
useNewUrlParser: true,
useUnifiedTopology: true,
useCreateIndex: true
})
.then(()=>console.log('Connected to MongoDB...'))
.catch(err=> console.log('Not Connected, bad ;(', err));
app.use(express.json());
//THis is only for posting the user, e.g. Registering them
app.use('/api/users', users);
app.use('/api/auth', auth);
const port = process.env.PORT || 3000;
app.listen(port, () => console.log(`Listening on port ${port}...`));
Здесь происходит реальный код. Тестируя это в Postmon, я смог установить, что значения сохраняются в MongoDB.
router.post('/', async (req, res) => {
//validates the request.
const { error } = validate(req.body);
if (error) return res.status(400).send(error.details[0].message);
let user = await User.findOne({email: req.body.email});
if (user) return res.status(400).send('User Already Register, try again!');
user = new User(_.pick(req.body, ['firstName','lastName','email','password','subscription']));
const salt = await bcrypt.genSaltSync(15);
user.password = await bcrypt.hash(user.password, salt);
//Here the user is being saved in the Database.
await user.save();
//const token = user.generateAuthToken();
//const token = jwt.sign({_id: user._id}, config.get('jwtPrivateKey'));
const token = user.generateAuthToken();
//We are sending the authentication in the header, and the infromation back to client
res.header('x-auth-token',token).send( _.pick(user, ['_id','firstName','lastName','email','subscription']));
});
Теперь мой вопрос:
- Как я могу вызвать второй блок кода из a в одном конкретном HTML-файле. При использовании Action=»путь к users.js «, браузер открывает код файла js, но ничего не делает.
- Нужно ли мне переписать часть Post-блока, чтобы она также включала сведения о подключении к БД? И будет ли это означать, что я буду поддерживать соединение с MongoDB после вставки Read и т.д.? Разве это не потребляло бы много ресурсов, если бы несколько пользователей, например, вошли в систему одновременно?
- Или есть способ, как я могу использовать index.js the users.js который рассматривается в index.js файл вместе?
Все это теоретические вопросы, поскольку я не совсем уверен, как использовать созданный API в html, затем я создал, пройдя через руководство.
Нужно ли мне изменить подход здесь?
Ответ №1:
После нескольких долгих часов я, наконец, понял свою собственную проблему и вопрос.
Чего я хотел добиться, так это из HTML-страницы отправлять данные в MongoDB через API (я полагаю, это лучший способ описать это). Для того, чтобы сделать это, мне нужно было:
- Запустите сервер для функции API, например, nodemon index.js , в котором содержится информация об API.
- Открыл VS Code, открыл терминал и запустил сервер API (если я могу так это назвать)
- Открыл CMD и запустил локальный хост для index.html перейдя к его папке, а затем записав http-сервер, теперь я мог получить доступ к этому наhttp://127.0.0.1:8080.
-
Для register.html в форме, которая мне нужна для публикации:
Это та часть, которую я не понял, но теперь это имеет смысл. По сути, я запускаю серверный API отдельно, и как только он запущен, я могу использовать, например, Postmon и другие приложения, которые могут получить доступ к этой ссылке. Я почему-то подумал, что html нужно еще несколько прямых вызовов.
Итак, после запуска localhost затем register.html будет знать, где его опубликовать через API.
Теперь у меня проблема с проверкой JOI, хотя в другом, более простом случае это сработало, поэтому мне просто нужно исправить код там.
Спасибо, что прочитали, и приносим извинения, если было непонятно, все еще изучаю терминологию!