Monday, 2 May 2022

IIS deployment support details

 Node JS - IIS deployment support details


node:

http://go.microsoft.com/?linkid=9784334


IISNode:

https://github.com/azure/iisnode/releases/download/v0.2.21/iisnode-full-v0.2.21-x64.msi


URLRewrite:

https://www.iis.net/downloads/microsoft/url-rewrite


web.config:

<configuration>

<system.webServer>

<handlers>

  <add name="iisnode" path="WebAPI.js" verb="*" modules="iisnode" />

</handlers>


<rewrite>

  <rules>

    <rule name="nodejs">

      <match url="(.*)" />

      <conditions>

        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />

      </conditions>

      <action type="Rewrite" url="/WebAPI.js" />

    </rule>

  </rules>

</rewrite> 


<security>

  <requestFiltering>

    <hiddenSegments>

      <add segment="node_modules" />

      <add segment="iisnode" />

    </hiddenSegments>

  </requestFiltering>

</security>

</system.webServer>

 </configuration>





Saturday, 30 April 2022

Auto redirect http to https --

 <?xml version="1.0" encoding="utf-8"?>

<configuration>

  <system.webServer>

    <httpProtocol>

      <customHeaders>

        <add name="Access-Control-Allow-Origin" value="*" />

        <add name="Access-Control-Allow-Credentials" value="true" />

        <add name="Access-Control-Allow-Methods" value="GET,HEAD,OPTIONS,POST,PUT" />

        <add name="Access-Control-Allow-Headers" value="Access-Control-Allow-Headers, Origin,Accept, X-Requested-With, Content-Type, Access-Control-Request-Method, Access-Control-Request-Headers" />

      </customHeaders>

    </httpProtocol>

    <rewrite>

      <rules>

        <rule name="Imported Rule 1" stopProcessing="false">

          <match url="^(.*)$" ignoreCase="true" />

          <conditions>

           <add input="(https)" pattern="off"/>

<add input="{HTTPS}" pattern="^OFF$" />

          </conditions>

          <action type="Rewrite" url="/" appendQueryString="true" />

        </rule>

      </rules>

    </rewrite>

  </system.webServer>

</configuration>


Friday, 3 September 2021

Webtarder of Forex

 <div id="webterminal" style="width:100%;height:600px;"></div>

<script type="text/javascript" src="https://trade.mql5.com/trade/widget.js"></script>

<script type="text/javascript">

    new MetaTraderWebTerminal("webterminal", {

        version: 5,

        servers: ["AixoFX-Demo", "AixoFX-Live"],

        server: "AixoFX-Demo",

        demoAllServers: true,

        utmSource: "www.aixofx.com",

        startMode: "create_demo",

        language: "en",

        colorScheme: "black_on_white"

    });

</script>

Friday, 6 August 2021

Mail In Node Js

const express = require("express");

const router = express.Router();
const nodemailer = require('nodemailer');

router.get('/test'function (reqres) {
  res.send('hello world')
})

router.post('/contact-us/', (reqres=> {
    var name = req.body.first_name;
    var lastname = req.body.last_name;
    var email = req.body.email;
    var phone = req.body.phone;
  
    var emailMessage = `Hi ${name} ${lastname},\n\nThank you for contacting us.\n\nYour email is: ${email}.\n\nYour phone number is: ${phone}\n.`;
  
    console.log(emailMessage);

  
    var transporter = nodemailer.createTransport({
      host: 'smtp.test.com',
        port: 587 ,//2525,
        auth: {
        user: 'support@test.com',
        pass: 'kJAXffpJg%T3'
      }
    });
  
    var emailOptions = {
      from: 'support@test.com',
      to: 'ajayrajpoot1993@gmail.com',
      subject: 'contact-us',
      text: emailMessage
    };
  
    transporter.sendMail(emailOptions, (errinfo=> {
      if (err) {
        res.json(err);
      } else {
        console.log('Message Sent: ' + info.response);
        console.log('Email Message: ' + emailMessage);
        res.status(200).json('you have sent message successfully !');
      }
    });
  });


module.exports = router; 

Wednesday, 17 March 2021

upload base64 in Node.Js

 



app.use('/lithiom/uploadfile', (reqresnext=> { 
    var imgB64Data = req.body.oData;
    var decodedImg = decodeBase64Image(imgB64Data);
    var imageBuffer = decodedImg.data;
    var type = decodedImg.type;
    console.log("type"type
    var extension = "jpg";
    console.log("type"extension);
    console.log(">>>"new Date());
    var date = new Date();
    var fileName = date.getTime() + "_image." + extension;
    try {
        fs.writeFileSync("public/uploads/" + fileNameimageBuffer'utf8');
        res.send({ Message: "Fileupload"Result: truefileName: fileNamelocation: "uploads/" + fileName })
    }
    catch (err) {
        console.error(err)
        res.send({ Message: " Fail to Upload File"Result: trueerr: err })
    }
});
function decodeBase64Image(dataString) {
    var matches = dataString.match(/^data:([A-Za-z-+\/]+);base64,(.+)$/),
        response = {};

    if (matches.length !== 3) {
        return new Error('Invalid input string');
    }

    response.type = matches[1];
    response.data = new Buffer(matches[2], 'base64');

    return response;
}



===Angular



onFileChange(event: any) {

    var reader: any = new FileReader();

    if (event.target.files && event.target.files.length > 0) {

      let file = event.target.files[0];

      console.log("file:", file);

      reader.readAsDataURL(file);

      console.log("reader:", reader);

      reader.onload = () => {

        console.log(">>>>", reader.result)

        var p = {

          oData: reader.result.toString()

          // oData: reader.result.toString().split(',')[1],

        }

        this.uploadfile(p);

      }


    };


  }



  uploadfile(p: any) {

    try {

      this.gbls.uploadfile(p).subscribe((data: any) => {

        var result: any = data;

        if (result.Result == true) {

          this.uimage = result.location;

          this.gbls.successTost(data.Message);

        } else {

          this.gbls.errorTost(data.Message);

        }

      }, error => {

        this.gbls.errorTost("Not Responding");

      });

    } catch (e) {

      this.gbls.errorTost("  catch Error");

    }

  }







Socket.Io in Norde.Js / Angular

 




======socket.js

let io;

module.exports = {
    init: httpServer => {
        io = require('socket.io')(httpServer, {
            cors: {
                origin: "*",
                credentials: true
            }
        });
        return io;
    },
    getIO: () => {
        if (!io) {
            throw new Error('Socket.io not initialized!');
        }
        return io;
    },
    getNoOfUserConnected: () => {
        if (!io) {
            throw new Error('Socket.io not initialized!');
        } 
        // console.log(">>>>>>ddddd>",io.engine.clientsCount);
        // console.log(">>>>>>>",io.sockets.sockets.length); 
        return io.engine.clientsCount;
    }
};

====app.js

mongoose
    .connect(
        'mongodb+srv://ajtest:J9Xv169XWFbkSoQT@cluster0.b2p29.mongodb.net/test?retryWrites=true'
    )
    .then(result => {
        var server = app.listen(8082);

        const io = require('./socket').init(server);
        io.on('connection'socket => {
            console.log('Client connected');
            // require('./socket').getIO().emit('liveUser', { liveUser: require('./socket').getUserConnected() });
            console.log(">>>>getNoOfUserConnected"require('./socket').getNoOfUserConnected());
        })
    })
    .catch(err => console.log(err));


        var liveUser = require('./socket').getNoOfUserConnected();


require('./socket').getIO().emit('data1'"data");


========================Angular============


import { io } from 'socket.io-client';

const socket = io('http://localhost:8082');



  ngOnInit(): void {
    socket.on('liveUser', (resany=> {
      console.log(">>>liveUser connectiont"res); 
    })
  }






ngrx in Angular

ngrx 

npm i @ngrx/store --save


https://ngrx.io/guide/schematics

npm install @ngrx/{store,effects,entity,store-devtools} --save

npm i  @ngrx/schematics -g 
ng add @ngrx/schematics


1.store
ng generate store State  --root --module app.module.ts

2.Action 
ng generate action User

3.Reducere 
ng generate reducer  User --reducers reducers/index.ts

4.Selector 
ng generate selector  User


5.Selector 
ng generate effect   User --root -m app.module.ts


===============Action
import { IUser } from './interfaces/users';
import { Action } from '@ngrx/store';

export enum UserActionTypes {
  LoadUsers = '[User] Load Users',
  LoadUsersSuccess = '[User] Load Users Success',
  LoadUsersFailure = '[User] Load Users Failure',
}

export class LoadUsers implements Action {
  readonly type = UserActionTypes.LoadUsers;
}

export class LoadUsersSuccess implements Action {
  readonly type = UserActionTypes.LoadUsersSuccess;
  constructor(public payload: { dataIUser[] }) { }
}

export class LoadUsersFailure implements Action {
  readonly type = UserActionTypes.LoadUsersFailure;
  constructor(public payload: { errorString }) { }
}

export type UserActions = LoadUsers | LoadUsersSuccess | LoadUsersFailure;



=====reducer
import { IUser } from './interfaces/users';
import { Action } from '@ngrx/store';
import { UserActionsUserActionTypes } from './user.actions';


export const userFeatureKey = 'userState';

export interface State {
  usersIUser[],
  errorString
}

export const initialStateState = {
  users: [],
  error: ''
};

export function reducer(state = initialStateactionAction): State {
// export function reducer(state = initialState, action: UserActions): State {

  switch (action.type) {
    case UserActionTypes.LoadUsers:
      return {
        ...state
      }
      case UserActionTypes.LoadUsersSuccess:
      return {
        ...state,
        // users:action.payload.data,
        error:''

      }
      case UserActionTypes.LoadUsersFailure:
      return {
        ...state,
        
        users:[],
        // error:action.payload.error,
      }
    default:
      return state;
  }
}


=====selector

import { createFeatureSelectorcreateSelector } from '@ngrx/store';

import { State } from "./user.reducer";

const getUserFeaturestate=createFeatureSelector<State>('userState');

export const getUser=createSelector(
    getUserFeaturestate,
    state =>state.users
)

export const getError=createSelector(
    getUserFeaturestate,
    state =>state.error
)

====effect

import { GlobalService } from 'src/app/services/global.service';
import { Injectable } from '@angular/core';
import { ActionsEffectofType } from '@ngrx/effects';

import { Observableof } from "rxjs";
import { Action } from "@ngrx/store";
import * as userActions from "./user.actions";
import { mergeMapmapcatchError } from "rxjs/operators";

@Injectable()
export class UserEffects {
  constructor(private actions$Actionsprivate gblsGlobalService) { }

  GET_ADM_SIGNUP_INFO() {
    var parms = {
      Index:   1,
      Count:100
    } 
    return  this.gbls.GET_ADM_SIGNUP_INFO(parms) ;      
  } 

  @Effect()
  loadUsers$:Observable<Action> = this.actions$.pipe(
    ofType(userActions.UserActionTypes.LoadUsers),
    mergeMap(
      action => this.GET_ADM_SIGNUP_INFO().pipe(
        map(users=>(new userActions.LoadUsersSuccess({data:users}))),
        catchError(err=>of(new userActions.LoadUsersFailure({error:err})))
      )
    )
  )
}




===selector

import { createFeatureSelectorcreateSelector } from '@ngrx/store';

import { State } from "./user.reducer";

const getUserFeaturestate=createFeatureSelector<State>('userState');

export const getUser=createSelector(
    getUserFeaturestate,
    state =>state.users
)

export const getError=createSelector(
    getUserFeaturestate,
    state =>state.error
)


==========Use In Component



import { Storeselect } from '@ngrx/store';
import * as UserActions from "../../user.actions";
import * as fromUser from "../../user.selectors";


constructor(  private storeStore  ) { }


  ngOnInit(): void {
      
    this.store.dispatch(new UserActions.LoadUsers()) //action dispatch 

    this.store.pipe(select(fromUser.getUser)).subscribe(users => {
      console.log(">>>>User"users);
    })
    this.store.pipe(select(fromUser.getError)).subscribe(error => {
      console.error(">>>>User Error"error);
    })

  }








IIS deployment support details

  Node JS - IIS deployment support details node: http://go.microsoft.com/?linkid=9784334 IISNode: https://github.com/azure/iisnode/releases/...