How to use nhost serverless functions with javascript
Tags: javascript, nhost, serverless, email
Published: 2022-11-06 15:51:27


![Nhost logo](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mtvxxifh0zr2wyd6a9tp.png)
Good day everyone, today we are going to build an email sending  api with nhost serverless functions, nhost is a firebase alternative which you should check out, they provide stuff like a postgreSql database, cloud storage and so much more, now lets jump right in to the code, but first let create a new project and install nodemailer and express , also note that inorder for you to do this you got to have node.js installed on your computer, if your new to serverless functions just know that they are programs (files or functions), that are hosted on servers that are maintained by  cloud provider, so you don't really need to know about cloud computing in other to have a working backend server but i advice that you at least have some basic knowledge of cloud computing if your doing programing professionally.
ok now lets start, first open your terminal and type
```
mkdir emailer
```
to make a folder for the project
```
cd email-sender
```
to enter the folder
```
npm init -y
npm i -d nodemailer express
```
To initialize the project and install the required dependencies
now we  just need two files to start coding. first type
```
mkdir functions
```
to make a folder called functions, the reason we need this folder is cause only  javascript or typescript files made in this specific folder will be used as api routes which we will make request to run the backend code. 
now in the functions folder make a file called email.js for linux and mac type
```
touch email.js
```
while for windows type
```
type nul > email.js
```
you can name the file what ever you want but just note that the name of the file will be part of your api route. now the second file that we need is test.js file which we will use to test the api this should be in the root folder. 
open the email.js file in a text editor and type

```javaScript

var nodemailer = required("nodemailer");

export default (req, res)=>{
res.status(200).send({response: "hello world"});
}
```

Now we need to create a git repository, signup in nhost.io and add that repository as a project. this should be easy as nhost is very user friendly, go to functions page in the site and then you should see this email.js file as an api route in there and the base url at the bottom of the page, if you didn't then the deploy most likely failed or you missed a step. now open the test.js file and make a fetch  request to the api route. then add what ever you named the file at the end, in my case i will add email. it should look like this

```javaScript
fetch("https://{project-url}.nhost.run/v1/functions/{name-of-file:eg_email}").then(data => data.json())
.then(response => console.log(response));

```

mine is
 
```javaScript
fetch("https://wgtebtfqvnppecpnpkab.nhost.run/v1/functions/email").then(data => data.json()).then(response => console.log(response));

//output
/* {
  response:"hello world"
}
*/

```

If that all went well then lets move to the next step. Now we are going to send a post request and get a response after  processing the request. you can send anything but am just going to send "Hello world"

```javaScript
fetch("https://wgtebtfqvnppecpnpkab.nhost.run/v1/functions/email", {
    method: "POST",
    body: JSON.stringify({
    req:"Hello world"
    }),
    headers: {
        "Content-Type": "application/json"
    }
})
.then(response => response.json())
.then(json => console.log(json))
.catch(error => console.log(error))
```

Now in the email.js we will access and send the request as a response.

```javaScript
export default (req,res) =>{
res.status(200).send(JSON.parse(req);
}
```
Now if that all went well let's send an email with nhost servers less functions we are going to send an email using nodemailer,
if you don't know how to use nodemailer  you can check it out here https://www.w3schools.com/nodejs/nodejs_email.asp

nodemailer in serversless function example
```javaScript
var nodemailer = require('nodemailer')
var express = require("express")

  
export default (req, res) => {
var request = JSON.parse(req)
var transporter = nodemailer.createTransport({
  service: 'gmail',
  auth: {
    user: request.sender
    pass: request.password
  }
});

var mailOptions = {
  from: request.sender,
  to: request.reciever,
  subject: request.title,
  html: request.html
};



  transporter.sendMail(mailOptions, function(error, info){
  if (error) {
    res.status(200).send({
      err:error,
      username: request.sender,
      password: request.password
    })
  } else {
    console.log('Email sent: ' + info.response);
    res.status(200).send({
      response: "email has been sent"
    })
  }
});
  
}
```

You might have noticed that I used replace function after turing the req to json form cause originally the req parameter was in it's object string form, then the Json stringify function changes the object to a json and addes an extra double quote cause its in json format.

congrats you sent an email with JavaScript in the nhost serversless function
 you can see the code in my git repository
https://github.com/tonwareemi/emailer