如何使用解析服务器和NextJS进行表达?

oymdgrw7  于 2022-11-23  发布在  其他
关注(0)|答案(1)|浏览(120)

我目前正尝试在我的express应用中使用parse server和express,但这是我第一次使用服务器,我无法理解渲染和路由是如何工作的。以下是我的代码:

const express = require("express");
const next = require("next");
const ParseServer = require('parse-server').ParseServer;
const path = require('path');

const PORT = process.env.PORT || 1338;
const dev = process.env.NODE_ENV !== "production";
const hostname = 'localhost'
const app = next({ dev, hostname, PORT });
const handle = app.getRequestHandler();

const databaseUri = 'mongodb+srv://';

if (!databaseUri) {
    console.log('DATABASE_URI not specified, falling back to localhost.');
  }

const config = {
  databaseURI: databaseUri || 'mongodb+srv://',
  cloud: process.env.CLOUD_CODE_MAIN || __dirname + '/cloud/main.js',
  appId: process.env.APP_ID || '',
  masterKey: process.env.MASTER_KEY || '', //Add your master key here. Keep it secret!
  serverURL: process.env.SERVER_URL || 'http://localhost:1338/parse', // Don't forget to change to https if needed
  liveQuery: {
    classNames: ['Posts', 'Comments'], // List of classes to support for query subscriptions
  },
};

app
  .prepare()
  .then(() => {
    const server = express();
    const showRoutes = require("./routes/index.js");

    server.use("/api", showRoutes(server));
    server.use('/pages', express.static(path.join(__dirname, '/pages')));

    const mountPath = process.env.PARSE_MOUNT || '/parse';

    const api = new ParseServer(config);
    server.use(mountPath, api);
    

    // server.get("*", (req, res) => {
    //   return handle(req, res);
    // });

    // server.get('/', function (req, res) {
    //     res.status(200).send('I dream of being a website.  Please star the parse-server repo on GitHub!');
    //   });

    server.get('/',function(req,res){
        return app.render(req, res, '/pages/index', req.query)
      });

    server.get('/test', function (req, res) {
        res.sendFile(path.join(__dirname, '/public/test.html'));
      });

    const httpServer = require('http').createServer(server);
    httpServer.listen(PORT, function () {
    console.log('parse-server-example running on port ' + PORT + '.');
    });

    ParseServer.createLiveQueryServer(httpServer);

    module.exports = {
        app,
        config,
      }
    }
  )

当我运行这段代码时,主页加载为空白,但是终端没有显示任何错误。我还在索引页中添加了render()函数,但是它似乎不起作用。
如果有人能指出我所犯的任何设置错误,并解释我如何使用parse和express配置nextjs以正确路由/呈现,我将非常感激。
在网上很难找到关于以下设置的帮助,所以如果有人能指出任何示例github repos或学习材料,这将是非常有帮助的。
谢谢你!

iyr7buue

iyr7buue1#

我认为您需要添加以下内容:

server.get('*', (req, res) => {
    return handle(req, res)
})

老实说,我建议您运行两个Web服务器:一个用于next.js应用程序(可能使用create-next-app脚本),另一个用于Parse Server应用程序。无论如何,如果您决定将这两个应用程序放在同一个服务器中,我将首先尝试设置next.js。一旦它开始工作,我将添加Parse Server代码。

相关问题