Home Web Front-end JS Tutorial Nodejs suffix name judgment limit code_javascript skills

Nodejs suffix name judgment limit code_javascript skills

May 16, 2016 pm 06:08 PM
nodejs suffix

Current Situation: Redundant
In web development, do we often use different programming languages ​​to implement the same functionality?
For example, a file upload function requires file format restrictions on the uploaded files. We usually use suffix names for restrictions.

Front end
For the sake of user experience, the file selected by the user will be judged on the page and only if it is legal will the user be able to upload it.

Copy code The code is as follows:

function is_filetype(filename, types) {
types = types.split(',');
var pattern = '.(';
for(var i=0; iif(0 != i) {
pattern = '|';
}
pattern = types[i].trim();
}
pattern = ')$';
return new RegExp(pattern , 'i').test(filename);
};

// Omit N lines of code here
if(!is_filetype($('#uploadfile').val(), 'doc,pdf,txt,wps,odf,md,png,gif,jpg')){
can_submit = false; // Uploading is not allowed
$('#uploadfile').val('') ;
alert('Only upload allowed: ' constant.RESUME_FILETYPES);
}
// N lines of code are omitted here

Backend
due to concerns about malicious uploads , it is inevitable to re-judge the files uploaded by users. So I used python to write a logic to determine the file suffix
Copy the code The code is as follows:

import re

def is_filetype(filename, types):
types = types.split(',')
pattern = '.(' '|'.join([t.strip( ) for t in types]) ')$';
return re.search(pattern, filename, re.I) != None

# web request handler
# Omit N lines here Code

What is the reason for such duplication of work?
1. The front-end can never be trusted;
2. The front-end and back-end use different programming languages;
What is the cost of such redundancy?
1. Modify the business logic and need to repeat it twice: if you suddenly find that the docx file type is not supported, you need to modify the javascript code and python code at the same time
2. Increase the cost of ensuring that the business logic of the javascript code and python code is consistent . Two types of tests need to be written separately, and the unit test runs twice as long.
nodejs era: DRY

Use nodejs no more DRY !

One code, front-end and back-end running at the same time
Copy code The code is as follows:

// constant.js
(function(exports){

exports.RESUME_FILETYPES = 'doc,docx, pdf,txt,wps,odf,md,png,gif,jpg';

})( (function(){
if(typeof exports === 'undefined') {
window .constant = {};
return window.constant;
} else {
return exports;
}
})() );

// util.js
(function(exports){

/**
* Remove whitespace characters at both ends of the string
*
* @return {String}
* @api public
*/
String.prototype.trim = function(){
return this.replace(/(^s*) |(s*$)/g, "");
};

/**
* Determine whether the file is of a custom type
*
* @param {String}filename
* @param {String}types, multiple types are separated by a comma, such as doc, docx, txt
* @return {Boolean} true or false
* @api public
*/
var is_filetype = exports.is_filetype = function(filename, types) {
types = types.split(',');
var pattern = '.(';
for(var i=0; iif(0 ! = i) {
pattern = '|';
}
pattern = types[i].trim();
}
pattern = ')$';
return new RegExp(pattern, 'i').test(filename);
};

})( (function(){
if(typeof exports === 'undefined') {
window.util = {};
return window.util;
} else {
return exports;
}
})() );

Front-end
Copy code The code is as follows:




// Omit N lines of code here
if (!util.is_filetype($('#uploadfile').val(), constant.RESUME_FILETYPES)){
can_submit = false; // Uploading is not allowed
$('#uploadfile').val(' ');
alert('Only uploads allowed: ' constant.RESUME_FILETYPES);
}
// N lines of code are omitted here

Backend
Copy code The code is as follows:

var util = require('./public/js/util.js'),
constant = require('./public/js/constant.js');
app.post ('/resume/upload/:job_id', function(req, res, next){
req.form.complete(function(err, fields, files){
if(!util.is_filetype(filepath, constant.RESUME_FILETYPES)) {
// Since the client has made a judgment, this situation is maliciously uploaded. Directly prompt
res.send('File format error: ' filepath
' , please Upload files in ' constant.RESUME_FILETYPES ' format');
return;
}
// save file ...
// N lines of code are omitted here
});
});

Wow, no more redundancy! done
Other common scenarios
Constant definition
Various useful tool modules, such as string operations
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Article

R.E.P.O. Energy Crystals Explained and What They Do (Yellow Crystal)
2 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: How To Get Giant Seeds
1 months ago By 尊渡假赌尊渡假赌尊渡假赌
Two Point Museum: All Exhibits And Where To Find Them
1 months ago By 尊渡假赌尊渡假赌尊渡假赌

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

The difference between nodejs and tomcat The difference between nodejs and tomcat Apr 21, 2024 am 04:16 AM

The main differences between Node.js and Tomcat are: Runtime: Node.js is based on JavaScript runtime, while Tomcat is a Java Servlet container. I/O model: Node.js uses an asynchronous non-blocking model, while Tomcat is synchronous blocking. Concurrency handling: Node.js handles concurrency through an event loop, while Tomcat uses a thread pool. Application scenarios: Node.js is suitable for real-time, data-intensive and high-concurrency applications, and Tomcat is suitable for traditional Java web applications.

The difference between nodejs and vuejs The difference between nodejs and vuejs Apr 21, 2024 am 04:17 AM

Node.js is a server-side JavaScript runtime, while Vue.js is a client-side JavaScript framework for creating interactive user interfaces. Node.js is used for server-side development, such as back-end service API development and data processing, while Vue.js is used for client-side development, such as single-page applications and responsive user interfaces.

Is nodejs a backend framework? Is nodejs a backend framework? Apr 21, 2024 am 05:09 AM

Node.js can be used as a backend framework as it offers features such as high performance, scalability, cross-platform support, rich ecosystem, and ease of development.

What is the difference between npm and npm.cmd files in the nodejs installation directory? What is the difference between npm and npm.cmd files in the nodejs installation directory? Apr 21, 2024 am 05:18 AM

There are two npm-related files in the Node.js installation directory: npm and npm.cmd. The differences are as follows: different extensions: npm is an executable file, and npm.cmd is a command window shortcut. Windows users: npm.cmd can be used from the command prompt, npm can only be run from the command line. Compatibility: npm.cmd is specific to Windows systems, npm is available cross-platform. Usage recommendations: Windows users use npm.cmd, other operating systems use npm.

Is nodejs a back-end development language? Is nodejs a back-end development language? Apr 21, 2024 am 05:09 AM

Yes, Node.js is a backend development language. It is used for back-end development, including handling server-side business logic, managing database connections, and providing APIs.

What are the global variables in nodejs What are the global variables in nodejs Apr 21, 2024 am 04:54 AM

The following global variables exist in Node.js: Global object: global Core module: process, console, require Runtime environment variables: __dirname, __filename, __line, __column Constants: undefined, null, NaN, Infinity, -Infinity

How to connect nodejs to mysql database How to connect nodejs to mysql database Apr 21, 2024 am 06:13 AM

To connect to a MySQL database, you need to follow these steps: Install the mysql2 driver. Use mysql2.createConnection() to create a connection object that contains the host address, port, username, password, and database name. Use connection.query() to perform queries. Finally use connection.end() to end the connection.

Is there a big difference between nodejs and java? Is there a big difference between nodejs and java? Apr 21, 2024 am 06:12 AM

The main differences between Node.js and Java are design and features: Event-driven vs. thread-driven: Node.js is event-driven and Java is thread-driven. Single-threaded vs. multi-threaded: Node.js uses a single-threaded event loop, and Java uses a multi-threaded architecture. Runtime environment: Node.js runs on the V8 JavaScript engine, while Java runs on the JVM. Syntax: Node.js uses JavaScript syntax, while Java uses Java syntax. Purpose: Node.js is suitable for I/O-intensive tasks, while Java is suitable for large enterprise applications.

See all articles