Node.js 是一个开源、跨平台的 JavaScript 运行时环境,它允许开发者在浏览器之外构建服务器端应用程序。
它可用于构建性能甚佳的关键任务与生产型应用程序。在本篇实用教程与指南中,我们将给大家介绍如何使用 Node.js 创建 Web 服务器。
使用 Node.js 实现简单的 Web 服务器。介绍如何使用 Node.js 设置和部署 Web 服务器。它逐步讲解了每个步骤,包括项目初始化、Express.js 集成和许多基本功能,为任何 Node.js 新手提供了坚实的基础。
构建动态 Web 应用程序。涵盖了广泛的功能,例如处理表单、响应用户请求和动态提供网页,这些功能对于使您的 Web 应用程序具有交互性和吸引力至关重要。
探索 Node.js 功能。深入了解 Node.js 的 Web 开发功能,包括如何处理静态文件、处理错误和实现表单提交。本指南提供了使用 Node.js 构建功能丰富的 Web 应用程序的实用方法。
node -vnpm -v
mkdir book-clubcd book-clubnpm init -y
此命令package.json将为你的项目创建一个文件。它将包含有关项目的元数据,包括其依赖项:
{"name": "book-club","version": "1.0.0","description": "","main": "index.js","scripts": { "test":"echo \"Error: no test specified\" && exit 1" },"keywords": [],"author": "","license": "ISC"}
npm install expressconst express = require('express');
const app = express();该express()函数是 Express 模块导出的顶级函数。它创建一个 Express 应用程序,我们将其分配给变量app。
app.get('/', (req, res) => {res.send('Hello World!');});
这里,app.get()是一个函数,它告诉服务器在对特定路径(在本例中为/)发出 GET 请求时该做什么。此函数接受两个参数:路径和接受请求和响应的回调函数。
const port = 3000;app.listen(port, () => {console.log(`Server is running at http://localhost:${port}`);});
该app.listen()函数启动服务器并使其监听指定端口上的请求。
module.exports = {home: 'Welcome to our Book Club!',about: 'About Us',notFound: '404 Not Found'};
const messages = require('./messages');现在,在路由中可使用这些消息:
app.get('/', (req, res) => {res.send(messages.home);});app.get('/about', (req, res) => {res.send(messages.about);});app.use((req, res) => {res.status(404).send(messages.notFound);});
这里,app.use()是每次向服务器发出请求时都会调用的方法。我们在这里使用它来处理所有未定义的路由,并发送消息404 Not Found。
mkdir public为了达到本篇文章的目的,让我们添加一个简单的 HTML 文件和一个 CSS 文件。
在public目录中,创建一个名为的新文件index.html并添加以下代码:
Book Club
Welcome to our Book Club!>/h1>
另外,在public目录中创建一个名为styles.css的新文件,并添加以下代码:
body {font-family: Arial, sans-serif;}
app.js在路由定义之前将以下行添加到文件中:
app.use(express.static('public'));其中,express.static函数是 Express.js 中的内置中间件函数。它提供静态文件,并将要提供文件的目录名称作为了参数。
此表单将向路径/submit发送 POST 请求。请求正文将包含输入字段的值。
npm install body-parser步骤 3:导入并使用 body-parser
下面,将 body-parser 导入到app.js文件中:
const bodyParser = require('body-parser');app.use(bodyParser.urlencoded({ extended: false }));
该bodyParser.urlencoded()函数将解析属性下可用的传入请求主体req.body。
app.post('/submit', (req, res) => {const book = req.body.book;console.log(`Book submitted: ${book}`);res.send(`Book submitted: ${book}`);});
const books = [];
app.post('/submit', (req, res) => { const book = req.body.book;books.push(book);console.log(`Book submitted: ${book}`);res.send(`Book submitted: ${book}`);});
app.get('/books', (req, res) => {res.send(books.join(', '));});
注意:在实际应用中,你应该会将数据存储在数据库中。在本篇文章中,当每次重新启动服务器时,数组中的数据都会丢失。
app.use((err, req, res, next) => {console.error(err.stack);res.status(500).send('Something Went Wrong!');});
此中间件函数有4个参数,而不是平常的3个(req、res、next)。此时只要应用程序出现错误,就会调用此函数。
app.post('/submit', (req, res, next) => {const book = req.body.book;if (!book) {const err = new Error('Book title is required');return next(err);}books.push(book);console.log(`Book submitted: ${book}`);res.send(`Book submitted: ${book}`);});
此处理程序检查 POST 请求中是否提供了书名。如果没有,它会创建一个新Error对象并将其传递给next函数。这将跳过所有后续中间件函数并直接转到中间件进行错误处理。
npm install ejsapp.set('view engine', 'ejs');这告诉 Express 在渲染视图时使用 EJS 作为视图引擎。
mkdir viewsBook Club <%= message %>
Submitted Books:
<% books.forEach(function(book) { %> - <%= book %>
<% }); %> 占位<%= message %>标签将用于输出消息变量的值。
app.post('/submit', (req, res) => { const book = req.body.book;books.push(book);console.log(`Book submitted: ${book}`);res.redirect('/');});
注意:在 POST 请求后重定向用户是一种非常好的做法。这称为Post/Redirect/Get 模式,它可以有效防止重复提交表单。
app.get('/', (req, res) => {res.render('index', { message: messages.home, books: books });});
node app.jsServer is running at http://localhost:3000
你应该会在终端中看到这样一条消息。
或者,你也可以通过向package.json文件中添加脚本来简化启动过程:
现在无需运行node app.js,而是可以直接调用npm start:
npm start作者:万能的大雄
本篇文章为 @ 行动的大雄 创作并授权 21CTO 发布,未经许可,请勿转载。
内容授权事宜请您联系 webmaster@21cto.com或关注 21CTO 公众号。
该文观点仅代表作者本人,21CTO 平台仅提供信息存储空间服务。
请扫描二维码,使用微信支付哦。