Categories
Node.js Tips

Node.js Tips — Run Commands, Response Headers, Read Files, and More

Spread the love

Like any kind of apps, there are difficult issues to solve when we write Node apps.

In this article, we’ll look at some solutions to common problems when writing Node apps.

Node.js Execute System Command Synchronously

We can run system commands synchronously with the child_process module.

For instance, we can write:

const execSync = require('child_process').execSync;
const code = execSync('ls');

We run execSync to run the command we want.

Get Rid of header X-Powered-By:Express

We can remove the X-Powered-By header by using the app.disable method.

For instance, we can write:

app.disable('x-powered-by');

to stop the x-powered-by header from being added to the response.

We can also write:

app.set('x-powered-by', false);

to do the same thing.

Add a Custom Script to my package.json File that runs a JavaScript File

We can add the script to the package.json file’s scripts section.

For instance, we can write:

"scripts": {
  "start": "node app.js",
},

Then we can run npm start to run it.

Generate Unique ID with Node.js

To make creating unique IDs easy, we can add the uuid package to help us create UUIDs.

To install it, we run:

npm install uuid

Then we can use it by writing:

const { v1: uuidv1 } = require('uuid');`
const id = uuidv1();`

to create a v1 UUID.

And we can write:

const { v4: uuidv4 } = require('uuid');`
const id = uuidv4();`

to create a v4 UUID.

We can also use the crypto module to create a unique ID. However, it won’t be a UUID.

For instance, we can write:

const crypto = require("crypto");
const id = crypto.randomBytes(16).toString("hex");

id would be a 32-bit character string.

Replace a String in a File with Node.js

We can replace the content with new content with readFile and writeFile .

For instance, we can write:

const fs = require('fs');
const someFile = './file.txt';

fs.readFile(someFile, 'utf8', (err, data) => {
  if (err) {
    return console.log(err);
  }

  const result = data.replace('old string', 'new string');
  fs.writeFile(someFile, result, 'utf8', (err) => {
    if (err) {
      return console.log(err);
    }
  });
});

someFile is the path of the file.

We call fs.readFile to read the file with the UTF-8 encoding.

In the callback, we get the data , which has the content.

We call replace to replace 'old string' in data with 'new string' .

Then we call writeFile to write the file with the new content.

We also need the utf8 encoding to indicate that it’s a text file.

err will have the error object if it’s encountered in both callbacks.

Fix the ‘process.env.NODE_ENV is undefined’ Error

We can set the value of NODE_ENV by running:

SET NODE_ENV=development

in Windows or:

export NODE_ENV=development

in Linux to set the NODE_ENV environment variable.

Then process.env.NODE_ENV is set to 'development' when we run our app after those commands are run.

Also, we can put a script in the scripts section to set the NODE_ENV before running the script.

For instance, we can write:

"scripts": {
  "start": "set NODE_ENV=development && node app.js"
}

in package.json .

Set Response Header on Express.js Assets

We can call res.set to set the header on Express assets.

For instance, we can write:

res.set('Content-Type', 'text/plain');

where the first argument is the header key and the 2nd is the header value.

We can also pas sin an object to set multiple headers:

res.set({
  'Content-Type': 'text/plain',
  'Content-Length': '123'
})

We set the Content-Type and Content-Length all at once.

The res.header method is an alias of res.set .

To add more headers to the existing response header, we can use the res.append method.

For instance, we can write:

res.append('Set-Cookie', 'foo=bar; Path=/; HttpOnly')

We appended a response header for the cookie.

Read a Text File into an Array in a Node App

To read a text file into an array in a Node app, we can use the readFile method.

For example, we can write:

const fs = require('fs');

fs.readFile('file.txt', (err, data) => {
  if (err) {
    return console.log(err);
  }
  const array = data.toString().split("n");
  for(const a of array) {
    console.log(a);
  }
});

To read it in a synchronous way, we can use readFileSync :

constfs = require('fs');

const array = fs.readFileSync('file.txt').toString().split("n");
for(const a of array) {
  console.log(a);
}

Conclusion

We can set environment variables before running a Node app.

Also, we can read files in various ways.

We can use the child_process module to run commands in a Node app.

Response headers can be set in various ways.

By John Au-Yeung

Web developer specializing in React, Vue, and front end development.

Leave a Reply

Your email address will not be published. Required fields are marked *