美文网首页
“真实世界”全栈开发-3.2-后端的结构和服务器的运行

“真实世界”全栈开发-3.2-后端的结构和服务器的运行

作者: 桥头堡2015 | 来源:发表于2018-02-04 11:02 被阅读10次

    我们上一讲搭建好了开发环境、克隆了项目种子,手头实际上已经有了一个可以跑起来的服务器,这篇文章先来检阅下项目的结构和已有的内容,然后试着把让这个基本没有任何功能的服务器跑起来。

    后端结构

    我们的项目后端其实是一个Express应用。它的结构也是Express应用常见的结构之一。

    .
    ├── config/
    │   └── index.js
    ├── models/
    ├── public/
    ├── routes/
    │   ├── api/
    │   │  └── index.js
    │   └── index.js
    ├── app.js
    ├── package.json
    └── .gitignore
    
    • config文件夹里会存放应用的配置文件。
    • models文件夹内将存放Mongoose模型文件。
    • public文件夹本来是用来存放静态文件的,比如:HTML、CSS、图像等等。 不过我们的后端完全是用来支持API的,所以这个文件夹不会有任何内容。
    • routes文件夹里的文件用于定义端点的路径和逻辑。
    • app.js是后端应用的起点。它会把上述的其它部分结合到一起。
    • package.json定义了后端应用的依赖包和npm可以执行的脚本命令。初次接触Node.js的朋友可以在这里查看关于这一文件的所有知识。

    运行服务器

    我们可以在后端的根目录下直接运行node app.js或者npm start来启动服务器。但是这样一来,在开发时,我们就需要反复地手动进行关闭与重启。为了避免这种烦琐,我们可以借助于nodemon这一工具。它可以监看项目目录下的源代码并且在有任何改动的时候,自动地重启服务器。

    安装nodemon

    我们建议尽量地避免全局安装npm包(以避免版本冲突),即使是nodemon这样的命令行工具:

    npm install --save-dev nodemon
    

    安装成功后,在后端项目的根目录下运行如下的命令来启动服务器:

    ./node_modules/.bin/nodemon app.js
    

    如果有如下的错误,则请确认MongoDB有没有启动(见上一篇):

    Error: connect ECONNREFUSED 127.0.0.1:27017
    

    如果命令行最终显示类似下面的输出,则服务器启动成功:

    [nodemon] starting `node app.js`
    Listening on port 3000
    

    利用npm脚本启动服务器

    上述的利用nodemon直接启动服务器的方法太长了,我们可以新写一条npm脚本来简化开发环境下服务器的启动命令。打开package.json"scripts"对应的对象中添加dev命令:

    "scripts": {
        "start": "node ./app.js",
        "dev": "nodemon ./app.js",
        "test": "echo \"Error: no test specified\" && exit 1"
      },
    

    我们不去改动"start"命令,因为nodemon仅仅适用于开发环境。在生产环境中,我们还是需要npm start来启动服务器。

    现在我们可以用下面的命令来代替上一小节所用的那一长行了:

    npm run dev
    

    命令行应该显示类似的成功信息。

    [nodemon] starting `node app.js`
    Listening on port 3000
    

    使用这种方法的另一个好处就是,如果哪天我们决定用另一种工具来代替nodemon,我们只需要更改package.json中的dev命令的内容,而不需要重新学着输入新的命令。

    到此服务器已经顺利地跑起来了,下一讲我们终于要开始写代码了。

    相关文章

      网友评论

          本文标题:“真实世界”全栈开发-3.2-后端的结构和服务器的运行

          本文链接:https://www.haomeiwen.com/subject/kiqmzxtx.html