Node.js 从零开发web server博客项目--项目初始化

本篇博客记录了《Node.js 从零开发web server博客项目》的原生开发系列内容。

开篇主要介绍原生项目的搭建,以及初步的项目结构设计。

一、项目初始化

新建项目目录,并进入到项目目录中,使用命令npm init初始化项目,期间会让你配置项目名称,版本,作者等信息。结束之后生成package.json文件。

{
  "name": "blog-1",
  "version": "1.0.0",
  "description": "",
  "main": "bin/www.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "dev": "cross-env NODE_ENV=dev nodemon ./bin/www"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "cross-env": "^7.0.2",
    "nodemon": "^2.0.3"
  }
}

其中main表示的是项目的入口文件,我们改成了bin/www.js,需要建立相应的文件夹与入口文件。

scripts是可执行的命令,包括编译执行、测试等命令的编写。

dependencies主要管理一些依赖的npm包等内容。

 二、根据功能模块划分文件夹

入口文件为bin/www.js,主要负责项目的启动,创建http server端的监听以及请求分发、返回结果等。

src为源码,主要按照功能模块划分文件夹,我们根据接口进行划分,一开始不关注功能的具体实现,我们根据接口划分不同的路由文件。

目前为止,我们的目录结构如下:

三、入口文件、请求处理与返回及路由文件的编写

首先是入口文件www.js的编写。其主要职责是创建http server,并且监听指定的端口。

const http = require('http');
const serverHandler = require('../app');

const server = http.createServer(serverHandler);
const port = 8000;
server.listen(port);

整体代码相对简单,职责单一,对请求的处理和返回则放在了app.js中。


const userRouterHandler = require('./src/router/user.router');
const blogRouterHandler = require('./src/router/blog.router');
const serverHandler = (req, res) => {
    res.setHeader('Content-type','application/json');

    const userLogin = userRouterHandler(req, res);
    if(userLogin){
        res.end(JSON.stringify(userLogin));
        return;
    }
   const blogData = blogRouterHandler(req, res);
   if(blogData){
       res.end(JSON.stringify(blogData));
       return;
   }

   res.writeHead(404, {"Content-type":"text/plain"});
   res.write("404 Not Found");
   res.end();

    
}
module.exports = serverHandler;

app.js中主要是处理请求和内容返回,其中res.setHeader('Content-type','application/json');设置了返回内容是JSON格式,注意虽然返回的内容是json格式,但还是需要把返回的json转成json字符串再返回。

路由文件将具体处理每个接口,并返回结果。

const userRouterHandler = (req,res) => {
    const method = req.method;
    const url = req.url;
    const path = url.split('?')[1];

    if(method==="POST" && path === "/api/user/login"){
        return {
            msg: "登录接口"
        }
    }

}

module.exports = userRouterHandler;

以用户登录的接口为例,用户模块的路由需要判断请求的方法,以及path,请求的路径,即接口路径。然后根据路径匹配,处理不同的逻辑,并返回结果。

四、开发中实用的依赖

本项目中,截止目前为止使用了cross-env依赖,使用该依赖,我们可以设置环境变量,如开发环境设置如下

"dev": "cross-env NODE_ENV=dev nodemon ./bin/www"

该执行脚本设置了node环境变量为dev。使用时执行如下脚本:

process.env.NODE_ENV获取。

第二个使用的依赖是nodemon,引入这个依赖在我们开发过程中帮助很大,能监控文件是否发生变化,一旦发生变化将会自动编译。

使用如下

nodemon ./bin/www。

到目前为止,我们的代码已经能够处理不同的接口,并返回响应的内容。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值