解析服务器和 node.js 基础知识入门

Posted

技术标签:

【中文标题】解析服务器和 node.js 基础知识入门【英文标题】:Getting started with parse server and node.js basics 【发布时间】:2019-03-25 01:28:42 【问题描述】:

我从 AWS 市场安装了 bitnami 解析服务器,为 ios 应用程序提供后端。在 iOS 应用程序中,API 配置在 http://myURL.com/parse 下,当我转到我认为的主页 http://myURL.com 时,它会将我重定向到位于 http://myURL.com/apps 的解析仪表板。我想让http://myURL.com 为我的应用程序提供主页,而不是重定向到解析仪表板,以便可以构建一个共享应用程序使用的相同数据的 Web 应用程序。这是我第一个使用 node.js 的项目,所以我希望有人能在几个主题上为我指明正确的方向。我以前的 Web 应用程序工作总是在 LAMP 堆栈上,所以我很好奇:

我是否正确假设 iOS 使用的解析后端也可以是通过浏览器访问的 Web 应用程序的后端? 当我在 /home/bitnami/apps/parse/htdocs 分析 server.js 中的代码时,我没有看到重定向到 myURL.com/apps 的函数,是否应该关注其他领域了解 myURL.com 如何重定向到应用程序文件夹? 我注意到 /home/binami/apps/rockmongo 中存在一个文件夹,其中包含 php 脚本的安装说明,我的 AWS 实例可以运行 php 和 node.js 还是安装 LAMP 堆栈会干扰 node.js 堆栈? 我确信有一些很棒的文档和/或教程,您能否通过提供正确的方式来表达 google 搜索或更好地提供指向教程本身的任何链接来帮助我开始?

对于上下文,我的 iOS 允许用户登录并让他们上传图像以解析服务器类,我只是想让用户登录并使用具有用户/文件类的相同解析服务器从 Web 浏览器上传图像.

下面的参考是 server.js,它似乎以某种方式将请求从 myURL.com 定向到 myURL.com/apps:

require('dotenv').config();
var express = require('express');
var ParseServer = require('parse-server').ParseServer;
var app = express();
// Specify the connection string for your mongodb database
// and the location to your Parse cloud code
var api = new ParseServer(
    databaseURI: "mongodb://root:9dh********@127.0.0.1:27017/bitnami_parse",
    cloud: "./node_modules/parse-server/lib/cloud-code/Parse.Cloud.js",
    appId: "19defd7********",
    masterKey: "cd8********",
    fileKey: "3bce6********",
    serverURL: "http://54.**.**.**:80/parse",
    filesAdapter: 
        "module": "@parse/s3-files-adapter",
        "options": 
            "bucket": process.env.S3_BUCKET,
        
    ,
);
// Serve the Parse API on the /parse URL prefix
app.use('/parse', api);

var port = 1337;
app.listen(port, function() 
    console.log('parse-server running on port ' + port);
);

//Parse Dashboard
var ParseDashboard = require('parse-dashboard');
var dashboard = new ParseDashboard(
    apps: [
        
            appName: "My Bitnami Parse API",
            appId: "19defd7********",
            masterKey: "cd8d*******",
            fileKey: "3bce6********",
            production: true,
            serverURL: "http://54.**.**.**:80/parse"
        
    ],
    users: [
        
            user: process.env.ADMIN_USER,
            pass: process.env.ADMIN_PASSWORD
        
    ], useEncryptedPasswords: true
);

var allowInsecureHTTP = true;

// Serve the Parse Dashboard on the /parsedashboard URL prefix
app.use('/', dashboard);

var portdash = 4040;
app.listen(portdash, function() 
    console.log('parse-dashboard running on port ' + portdash);
);

【问题讨论】:

【参考方案1】:

Parse Dashboard 的挂载点在这一行中定义:

app.use('/', dashboard);

当您想为仪表板使用单独的挂载点时,您可以这样做:

app.use('/dashboard', dashboard);

更改后,如果您点击http://myURL.com/dashboard,它将在 /dashboard/apps 中加载仪表板。 '/apps' 端点由解析仪表板本身处理。

现在,如果您想在根路由 (/) 或 http://myURL.com 中加载您的网站,您需要创建另一个路由(假设您现在要提供静态网站)

app.use('/public', express.static(path.join(__dirname, '/public'), 
   etag: true
));

app.get('/', function (req, res) 
   res.sendFile(path.join(__dirname, '/public/index.html'));
);

要为静态站点提供服务,您需要创建一个文件夹,您将从该文件夹中为静态站点提供服务。在这种情况下,我创建了一个名为 public 的文件夹,并将我所有的 html、css、js 放在那里。现在我需要在 express 中指定静态文件夹。这就是我在第一行所做的。之后,我只需通过创建“GET”路由来提供 index.html。

您还可以做很多其他事情,例如创建 API 或为动态网站提供服务以及使用解析服务器。但要做到这一点,您必须首先了解使用 nodejs 的 express 框架。

更新: Parse API 和 Dashboard 是两个独立的东西。您只能在没有仪表板的情况下运行 parse-server,反之亦然。在您的代码中,您将解析服务器安装在 /parse 端点中。看看这一行

app.use('/parse', api);

所以现在解析服务器在 /parse 端点中可用。你可以把它改成任何东西。为解析服务器和仪表板创建单独的端点。

【讨论】:

改变 app.use('/',dashboard);是解决方案,我只想注意新名称(例如 app.use('/dashboard', dashboard);)不能以字符串“parse”开头。我试图这样做,不得不四处搜索以找出它为什么不起作用,所以认为这是一个很好的评论。 @DanielPatriarca 查看答案的更新部分。

以上是关于解析服务器和 node.js 基础知识入门的主要内容,如果未能解决你的问题,请参考以下文章

入门Node.js之HTTP

Node.js入门-知识整理

前端知识总结——Node.js入门

带你入门nodejs第一天——node基础语法及使用

带你入门nodejs第一天——node基础语法及使用

Node.js入门 01:基础使用与说明