Preamble
Hello everyone, continue with the basic Nodejs series, today I will continue to add functions to view details and edit and delete products. Well, forget that in the previous post, after connecting to mysql, we haven’t changed the search function yet, so in this article I will fix the search function as well. Let’s get started now
Perform
Edit search function
Simply edit the function
1 2 3 4 5 6 7 8 9 10 | app <span class="token punctuation">.</span> <span class="token function">get</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'/search'</span> <span class="token punctuation">,</span> <span class="token keyword">function</span> <span class="token punctuation">(</span> req <span class="token punctuation">,</span> res <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">var</span> id <span class="token operator">=</span> req <span class="token punctuation">.</span> query <span class="token punctuation">.</span> id <span class="token punctuation">;</span> <span class="token keyword">var</span> data <span class="token operator">=</span> posts <span class="token punctuation">.</span> <span class="token function">filter</span> <span class="token punctuation">(</span> <span class="token keyword">function</span> <span class="token punctuation">(</span> item <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> item <span class="token punctuation">.</span> id <span class="token operator">===</span> <span class="token function">parseInt</span> <span class="token punctuation">(</span> id <span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> res <span class="token punctuation">.</span> <span class="token function">render</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'index'</span> <span class="token punctuation">,</span> <span class="token punctuation">{</span> posts <span class="token punctuation">:</span> data <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> |
to be like this is okay
1 2 3 4 5 6 7 8 9 10 | app <span class="token punctuation">.</span> <span class="token function">get</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'/search'</span> <span class="token punctuation">,</span> <span class="token keyword">function</span> <span class="token punctuation">(</span> req <span class="token punctuation">,</span> res <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">var</span> id <span class="token operator">=</span> req <span class="token punctuation">.</span> query <span class="token punctuation">.</span> id <span class="token punctuation">;</span> <span class="token keyword">var</span> sql <span class="token operator">=</span> ` <span class="token constant">SELECT</span> <span class="token operator">*</span> <span class="token constant">FROM</span> products where id <span class="token operator">=</span> <span class="token single-quoted-string string">'${id}'</span> ` <span class="token punctuation">;</span> conn <span class="token punctuation">.</span> <span class="token function">query</span> <span class="token punctuation">(</span> sql <span class="token punctuation">,</span> <span class="token keyword">function</span> <span class="token punctuation">(</span> err <span class="token punctuation">,</span> data <span class="token punctuation">,</span> fields <span class="token punctuation">)</span> <span class="token punctuation">{</span> res <span class="token punctuation">.</span> <span class="token function">render</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'index'</span> <span class="token punctuation">,</span> <span class="token punctuation">{</span> products <span class="token punctuation">:</span> data <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> |
In the previous post, we filter
by id to get the elements that satisfy the conditions in the array, but now we simply get the product list and where by id sent from the client.
Detail
First of all we need to revise the index.pug page a little bit so that we can perform detail view, edit, delete. I have the index.pug page as follows:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | <span class="token punctuation">.</span> products head style <span class="token punctuation">.</span> table <span class="token punctuation">,</span> th <span class="token punctuation">,</span> td <span class="token punctuation">{</span> border <span class="token punctuation">:</span> <span class="token number">1</span> px solid black <span class="token punctuation">;</span> border <span class="token operator">-</span> collapse <span class="token punctuation">:</span> collapse <span class="token punctuation">;</span> margin <span class="token punctuation">:</span> <span class="token number">10</span> px <span class="token number">30</span> px <span class="token punctuation">;</span> <span class="token punctuation">}</span> th <span class="token punctuation">,</span> td <span class="token punctuation">{</span> padding <span class="token punctuation">:</span> <span class="token number">5</span> px <span class="token punctuation">;</span> text <span class="token operator">-</span> align <span class="token punctuation">:</span> left <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token function">form</span> <span class="token punctuation">(</span> action <span class="token operator">=</span> <span class="token double-quoted-string string">"/search"</span> <span class="token punctuation">,</span> method <span class="token operator">=</span> <span class="token double-quoted-string string">"GET"</span> <span class="token punctuation">)</span> <span class="token function">input</span> <span class="token punctuation">(</span> name <span class="token operator">=</span> <span class="token double-quoted-string string">"id"</span> <span class="token punctuation">,</span> type <span class="token operator">=</span> <span class="token double-quoted-string string">"text"</span> <span class="token punctuation">,</span> placeholder <span class="token operator">=</span> <span class="token double-quoted-string string">"id"</span> <span class="token punctuation">)</span> button Search table thead tr th Id th Title <span class="token function">th</span> <span class="token punctuation">(</span> colspan <span class="token operator">=</span> <span class="token single-quoted-string string">'3'</span> <span class="token punctuation">)</span> Action tbody each pro in products tr td <span class="token operator">=</span> pro <span class="token punctuation">.</span> id td <span class="token operator">=</span> pro <span class="token punctuation">.</span> title td <span class="token function">a</span> <span class="token punctuation">(</span> href <span class="token operator">=</span> ` <span class="token operator">/</span> detail <span class="token operator">?</span> id <span class="token operator">=</span> <span class="token variable">$</span> <span class="token punctuation">{</span> pro <span class="token punctuation">.</span> id <span class="token punctuation">}</span> ` <span class="token punctuation">)</span> Detail td <span class="token function">a</span> <span class="token punctuation">(</span> href <span class="token operator">=</span> ` <span class="token operator">/</span> edit <span class="token operator">?</span> id <span class="token operator">=</span> <span class="token variable">$</span> <span class="token punctuation">{</span> pro <span class="token punctuation">.</span> id <span class="token punctuation">}</span> ` <span class="token punctuation">)</span> Update td <span class="token function">a</span> <span class="token punctuation">(</span> href <span class="token operator">=</span> ` <span class="token operator">/</span> delete <span class="token operator">?</span> id <span class="token operator">=</span> <span class="token variable">$</span> <span class="token punctuation">{</span> pro <span class="token punctuation">.</span> id <span class="token punctuation">}</span> ` <span class="token punctuation">)</span> Delete <span class="token function">a</span> <span class="token punctuation">(</span> href <span class="token operator">=</span> <span class="token single-quoted-string string">'/create'</span> <span class="token punctuation">)</span> <span class="token keyword">New</span> |
Looks like this from the outside
The idea is that when I click on the Detail
, I will switch to the detail page, so I need a page that is detail.pug
as follows:
1 2 3 4 5 6 7 8 | h1 Detail each data in products p id <span class="token punctuation">:</span> span <span class="token operator">=</span> data <span class="token punctuation">.</span> id p title <span class="token punctuation">:</span> span <span class="token operator">=</span> data <span class="token punctuation">.</span> title <span class="token function">a</span> <span class="token punctuation">(</span> href <span class="token operator">=</span> <span class="token single-quoted-string string">'/'</span> <span class="token punctuation">)</span> Go to home |
And the function in index.js
to switch from index page to detail page is as follows:
1 2 3 4 5 6 7 8 9 10 | app <span class="token punctuation">.</span> <span class="token function">get</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'/detail'</span> <span class="token punctuation">,</span> <span class="token keyword">function</span> <span class="token punctuation">(</span> req <span class="token punctuation">,</span> res <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">var</span> id <span class="token operator">=</span> req <span class="token punctuation">.</span> query <span class="token punctuation">.</span> id <span class="token punctuation">;</span> <span class="token keyword">var</span> sql <span class="token operator">=</span> ` <span class="token constant">SELECT</span> <span class="token operator">*</span> <span class="token constant">FROM</span> products where id <span class="token operator">=</span> <span class="token single-quoted-string string">'${id}'</span> ` <span class="token punctuation">;</span> conn <span class="token punctuation">.</span> <span class="token function">query</span> <span class="token punctuation">(</span> sql <span class="token punctuation">,</span> <span class="token keyword">function</span> <span class="token punctuation">(</span> err <span class="token punctuation">,</span> data <span class="token punctuation">,</span> fields <span class="token punctuation">)</span> <span class="token punctuation">{</span> res <span class="token punctuation">.</span> <span class="token function">render</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'detail'</span> <span class="token punctuation">,</span> <span class="token punctuation">{</span> products <span class="token punctuation">:</span> data <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> |
OK so we have finished the function to view details
Delete
The delete function will be simpler than you just need to call the delete function to pass the id and redirect back to the home page. The delete function is as follows:
1 2 3 4 5 6 7 8 | app <span class="token punctuation">.</span> <span class="token function">get</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'/delete'</span> <span class="token punctuation">,</span> <span class="token keyword">function</span> <span class="token punctuation">(</span> req <span class="token punctuation">,</span> res <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">var</span> id <span class="token operator">=</span> req <span class="token punctuation">.</span> query <span class="token punctuation">.</span> id <span class="token punctuation">;</span> <span class="token keyword">var</span> sql <span class="token operator">=</span> `Delete <span class="token constant">FROM</span> products where id <span class="token operator">=</span> <span class="token variable">$</span> <span class="token punctuation">{</span> id <span class="token punctuation">}</span> ` <span class="token punctuation">;</span> conn <span class="token punctuation">.</span> <span class="token function">query</span> <span class="token punctuation">(</span> sql <span class="token punctuation">,</span> <span class="token keyword">function</span> <span class="token punctuation">(</span> err <span class="token punctuation">,</span> data <span class="token punctuation">,</span> fields <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> res <span class="token punctuation">.</span> <span class="token function">redirect</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'/'</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> |
Here is the result
Update
The update function, I will do the following: First, it will create a page to display data that the user wants to edit. On that page, after the user completes the editing, press the update button, I will call the update function to update the product and return the product list page.
The first will be the function to call the product update page
1 2 3 4 5 6 7 8 9 10 | app <span class="token punctuation">.</span> <span class="token function">get</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'/edit'</span> <span class="token punctuation">,</span> <span class="token keyword">function</span> <span class="token punctuation">(</span> req <span class="token punctuation">,</span> res <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">var</span> id <span class="token operator">=</span> req <span class="token punctuation">.</span> query <span class="token punctuation">.</span> id <span class="token punctuation">;</span> <span class="token keyword">var</span> sql <span class="token operator">=</span> ` <span class="token constant">SELECT</span> <span class="token operator">*</span> <span class="token constant">FROM</span> posts where id <span class="token operator">=</span> <span class="token single-quoted-string string">'${id}'</span> ` <span class="token punctuation">;</span> conn <span class="token punctuation">.</span> <span class="token function">query</span> <span class="token punctuation">(</span> sql <span class="token punctuation">,</span> <span class="token keyword">function</span> <span class="token punctuation">(</span> err <span class="token punctuation">,</span> data <span class="token punctuation">,</span> fields <span class="token punctuation">)</span> <span class="token punctuation">{</span> res <span class="token punctuation">.</span> <span class="token function">render</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'update'</span> <span class="token punctuation">,</span> <span class="token punctuation">{</span> posts <span class="token punctuation">:</span> data <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> |
This function is similar to the function that calls to the product details page, here I call the update page. I have the page update.pug as follows:
1 2 3 4 5 6 7 8 9 10 | h1 Update each data in posts <span class="token function">form</span> <span class="token punctuation">(</span> action <span class="token operator">=</span> <span class="token double-quoted-string string">"/edit"</span> method <span class="token operator">=</span> <span class="token double-quoted-string string">"POST"</span> <span class="token punctuation">)</span> <span class="token function">input</span> <span class="token punctuation">(</span> type <span class="token operator">=</span> <span class="token double-quoted-string string">"text"</span> <span class="token punctuation">,</span> placeholder <span class="token operator">=</span> <span class="token double-quoted-string string">"id"</span> <span class="token punctuation">,</span> name <span class="token operator">=</span> <span class="token double-quoted-string string">"id"</span> value <span class="token operator">=</span> ` <span class="token variable">$</span> <span class="token punctuation">{</span> data <span class="token punctuation">.</span> id <span class="token punctuation">}</span> ` readonly <span class="token punctuation">)</span> br <span class="token function">label</span> <span class="token punctuation">(</span> id <span class="token operator">=</span> <span class="token double-quoted-string string">"title"</span> <span class="token punctuation">)</span> <span class="token function">input</span> <span class="token punctuation">(</span> type <span class="token operator">=</span> <span class="token double-quoted-string string">"text"</span> <span class="token punctuation">,</span> placeholder <span class="token operator">=</span> <span class="token double-quoted-string string">"title"</span> <span class="token punctuation">,</span> name <span class="token operator">=</span> <span class="token double-quoted-string string">"title"</span> value <span class="token operator">=</span> ` <span class="token variable">$</span> <span class="token punctuation">{</span> data <span class="token punctuation">.</span> title <span class="token punctuation">}</span> ` <span class="token punctuation">)</span> br button Update |
Here I show the product that the user wants to fix and because the id attribute I set to be the primary key and automatically incremented so I will leave the input tag of the id attribute readonly
to prevent the user from editing the id. After the user has finished editing the title
and presses Update
, it will call the update function to update data. The update function is as follows:
1 2 3 4 5 6 7 8 9 10 | app <span class="token punctuation">.</span> <span class="token function">post</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'/edit'</span> <span class="token punctuation">,</span> <span class="token keyword">function</span> <span class="token punctuation">(</span> req <span class="token punctuation">,</span> res <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">var</span> params <span class="token operator">=</span> req <span class="token punctuation">.</span> body <span class="token punctuation">;</span> <span class="token keyword">var</span> sql <span class="token operator">=</span> `update posts set title <span class="token operator">=</span> <span class="token single-quoted-string string">'${params.title}'</span> where id <span class="token operator">=</span> <span class="token variable">$</span> <span class="token punctuation">{</span> params <span class="token punctuation">.</span> id <span class="token punctuation">}</span> <span class="token punctuation">;</span> ` <span class="token punctuation">;</span> conn <span class="token punctuation">.</span> <span class="token function">query</span> <span class="token punctuation">(</span> sql <span class="token punctuation">,</span> <span class="token keyword">function</span> <span class="token punctuation">(</span> err <span class="token punctuation">,</span> result <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">if</span> <span class="token punctuation">(</span> err <span class="token punctuation">)</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> err <span class="token punctuation">)</span> <span class="token punctuation">;</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> <span class="token double-quoted-string string">"1 record update"</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> res <span class="token punctuation">.</span> <span class="token function">redirect</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'/'</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> |
In this function, I get the data from the update.pug page and send it up and update it to keep the data and finally return the page displaying the product list.
Here is the result:
Conclude
So I have completed the search function, view details and update and delete the product. In the next article, I will talk about the validation. Again thank you !!!