如何将express.js服务器部署到Netlify

15
我试图将一个Vue.js,Node,Express,MongoDB(MEVN)堆栈应用程序部署到Netlify。我已经成功地将应用程序的前端部分部署到了Netlify,现在正在尝试部署基于以下“serverless-http”示例的express服务器:https://github.com/neverendingqs/netlify-express/blob/master/express/server.js 我配置了我的服务器以包含“serverless-http”软件包:
server.js
const express = require('express');
const app = express();
const serverless = require('serverless-http');
const bodyParser = require('body-parser');
const cors = require('cors');
const mongoose = require('mongoose');
const config = require('./DB.js');
const postRoute = require('./routes');

mongoose.connect(config.DB, { useNewUrlParser: true, useUnifiedTopology: true }).then(
  () => { console.log('Database is connected') },
  err => { console.log('Can not connect to the database'+ err)}
);

app.use(cors());
app.use(bodyParser.urlencoded({extended: true}));
app.use(bodyParser.json());

app.use('/messages', postRoute);

app.use('/.netlify/functions/server', router);  // path must route to lambda
app.use('/', (req, res) => res.sendFile(path.join(__dirname, '../public/index.html')));


module.exports = app;
module.exports.handler = serverless(app);

路由.js

const express = require('express');
const postRoutes = express.Router();

// Require Post model in our routes module
let Post = require('./post.model');

// Defined store route
postRoutes.route('/add').post(function (req, res) {
  let post = new Post(req.body);
  post.save()
    .then(() => {
      res.status(200).json({'business': 'business in added successfully'});
    })
    .catch(() => {
      res.status(400).send("unable to save to database");
    });
});

// Defined get data(index or listing) route
postRoutes.route('/').get(function (req, res) {
    Post.find(function(err, posts){
    if(err){
      res.json(err);
    }
    else {
      res.json(posts);
    }
  });
});

module.exports = postRoutes;

我将应用程序重新部署到Netlify,但服务器似乎无法在Netlify上运行。该服务器位于我的vue.js应用程序的项目根目录中的一个文件夹中。我应该在Netlify上作为一个单独的站点运行该服务器吗?如果不是,我应该怎么做才能使服务器在Netlify上部署时运行?


1
我只是想评论一下,我目前也遇到了同样的问题。希望有更好的文档! - Anthony
有人能告诉我“/.netlify/functions/server”里面的代码是什么吗? - Bijitashya Birinchi
2个回答

11

虽然有段时间没翻译了,但是我来了。

Netlify Hosting 是针对 Jamstack 的,也就是说只有静态文件,服务器上没有处理。这个想法是利用其他机制从浏览器直接查询托管在其他地方的 API 等方式来动态获取数据,或者在构建网站时进行操作。

很可能你实际上需要将 express.js 应用程序部署为 Netlify Function。请查看Netlify 在其函数上运行 express 应用程序的博客文章


0

我曾遇到类似的问题,只不过我的服务器无法在本地连接到路由,我代码和你的主要区别在于,我必须执行以下操作:

const router = express.Router()

然后将app.use()替换为router.use()

就像我说的,这是针对当本地主机显示“无法获取/*定义的路径*/”时的情况。

P.S. 顺便提一下,在最近的express中,您不需要显式使用bodyParser,而是可以使用express.json()。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接