Как связать Node.js Опубликовать скрипт в HTML-форме?

#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']));
});
  

Теперь мой вопрос:

  1. Как я могу вызвать второй блок кода из a в одном конкретном HTML-файле. При использовании Action=»путь к users.js «, браузер открывает код файла js, но ничего не делает.
  2. Нужно ли мне переписать часть Post-блока, чтобы она также включала сведения о подключении к БД? И будет ли это означать, что я буду поддерживать соединение с MongoDB после вставки Read и т.д.? Разве это не потребляло бы много ресурсов, если бы несколько пользователей, например, вошли в систему одновременно?
  3. Или есть способ, как я могу использовать index.js the users.js который рассматривается в index.js файл вместе?

Все это теоретические вопросы, поскольку я не совсем уверен, как использовать созданный API в html, затем я создал, пройдя через руководство.

Нужно ли мне изменить подход здесь?

Ответ №1:

После нескольких долгих часов я, наконец, понял свою собственную проблему и вопрос.

Чего я хотел добиться, так это из HTML-страницы отправлять данные в MongoDB через API (я полагаю, это лучший способ описать это). Для того, чтобы сделать это, мне нужно было:

  1. Запустите сервер для функции API, например, nodemon index.js , в котором содержится информация об API.
  • Открыл VS Code, открыл терминал и запустил сервер API (если я могу так это назвать)
  • Открыл CMD и запустил локальный хост для index.html перейдя к его папке, а затем записав http-сервер, теперь я мог получить доступ к этому наhttp://127.0.0.1:8080.
  1. Для register.html в форме, которая мне нужна для публикации:

Это та часть, которую я не понял, но теперь это имеет смысл. По сути, я запускаю серверный API отдельно, и как только он запущен, я могу использовать, например, Postmon и другие приложения, которые могут получить доступ к этой ссылке. Я почему-то подумал, что html нужно еще несколько прямых вызовов.

Итак, после запуска localhost затем register.html будет знать, где его опубликовать через API.

Теперь у меня проблема с проверкой JOI, хотя в другом, более простом случае это сработало, поэтому мне просто нужно исправить код там.

Спасибо, что прочитали, и приносим извинения, если было непонятно, все еще изучаю терминологию!