【问题标题】:How can I run a node server with a next.js application?如何使用 next.js 应用程序运行节点服务器?
【发布时间】:2020-02-23 04:12:39
【问题描述】:

我正在 next.js 中设置一个 webapp,它与 node express 服务器并行运行,该服务器执行一些中间件工作以与 API 服务器交互。

我一切正常,但是我不知道如何在启动 npm 运行时使它们一起工作。它的唯一工作方式是在一个终端中使用“node server.js”,在另一个终端中使用“npm run start”。

我尝试添加这样的 package.json 脚本: "start-server": "下一个启动 && 节点 server.js" 但它只会启动 next.js 实例,如果我颠倒顺序,它只会启动节点实例。

如何让它们都工作,以便我可以部署这个项目?

【问题讨论】:

  • 试试next start & node server.js。还有类似 npmjs.com/package/concurrently 这样的 npm 包。
  • 天哪,谢谢伙计,看来我添加了一个额外的“&”,但它不起作用。

标签: node.js next.js


【解决方案1】:
  1. Concurrently npm 包安装到您的节点依赖项。

    npm install concurrently
    
  2. 将以下脚本添加到节点服务器的 package.json 中

    "frontend-install": "npm install --prefix frontend",
    "start": "node server.js",
    "server": "nodemon server.js",
    "frontend": "cd ./frontend && npm run start",
    "dev": "concurrently \"npm run server\" \"npm run frontend\""
    

我假设您的下一个应用程序位于名为“frontend”的文件夹/目录中。 3.在nextjs应用的package.json中添加如下代码。

    "proxy": "http://localhost:5000"
  1. 现在npm run start 命令一起启动节点服务器和nextjs 应用程序。

【讨论】:

    【解决方案2】:

    此外,由于 Next 是一个服务器端包,您可以在部署服务器之前构建下一个应用程序以使用您的 server.js 代码。 像这样:

    /* eslint-disable no-undef */
    const express = require('express');
    const next = require('next');
    const dev = process.env.NODE_ENV !== 'production';
    const app = next({ dev });
    const handle = app.getRequestHandler();
    
    const options = {
      ...
    };
    
    app.prepare().then(() => {
      const server = express();
    
      server.get('*', (req, res) => {
        return handle(req, res);
      });
    
      server.listen('8700', err => {
        if (err) throw err;
        console.log(`> Ready on Port 8700`);
      });
    });
    
    

    【讨论】:

      猜你喜欢
      • 2019-10-04
      • 1970-01-01
      • 1970-01-01
      • 2019-11-03
      • 2020-08-04
      • 2017-12-06
      • 2018-01-19
      • 1970-01-01
      • 2021-02-10
      相关资源
      最近更新 更多