我使用 React Native 和 Cheerio.js 刮板(每天使用 Cron Job 激活一次)制作了一个 UI,我将使用它从 Web 中获取某些数据,以便它可以在 UI 中呈现。但是,我不知道如何将两者联系起来。
我很确定我可以使用 Express 来做到这一点(我对后端最满意),但是有人可以准确地告诉我我需要做什么才能将前端连接到后端吗?
以防万一,我是一名初级开发人员(前端比后端更好)所以请保持你的答案简单。即使您的答案更具概念性,而不是基于代码,我也会非常感激。
我使用 React Native 和 Cheerio.js 刮板(每天使用 Cron Job 激活一次)制作了一个 UI,我将使用它从 Web 中获取某些数据,以便它可以在 UI 中呈现。但是,我不知道如何将两者联系起来。
我很确定我可以使用 Express 来做到这一点(我对后端最满意),但是有人可以准确地告诉我我需要做什么才能将前端连接到后端吗?
以防万一,我是一名初级开发人员(前端比后端更好)所以请保持你的答案简单。即使您的答案更具概念性,而不是基于代码,我也会非常感激。
我对 GraphQL 作为 REST 的替代品感到非常满意。但是,有很多方法可以通过 api 进行连接。您的客户端需要指向您的服务器运行位置的链接,并且您的服务器需要启用该链接。
我想我无法比本教程更好地解释它(以 Github 上的示例):https ://medium.com/react-native-training/react-native-with-apollo-server-and-client-part-1 -efb7d15d2361
https://medium.com/react-native-training/react-native-with-apollo-part-2-apollo-client-8b4ad4915cf5
并按照 Stephen Grider 的 Udemy 教程深入了解 GraphQL。他在他的教程中使用的是 React 而不是 React Native,但语法仍然非常接近。 https://www.udemy.com/graphql-with-react-course/learn/v4/overview
重要通知 - 第一个教程使用“apollo-server”,而 udemy 的教程使用 graphql。apollo-server 经常变化,graphql 可能更清晰。
这就是我在两者之间的桥梁的样子。最大的困难是为应用程序的前端版本(Next.js)处理 Cors,并发现可以在http://10.0.3.2:8080/graphql(可能会有所不同)而不是 localhost 上访问服务器: 8080。
我的 index.android.js(客户端):
import React from 'react'
import { AppRegistry } from 'react-native'
import App from './app'
import ApolloClient, { createNetworkInterface } from 'apollo-client';
import { ApolloProvider } from 'react-apollo'
const Client = () => {
const networkInterface = createNetworkInterface({
uri: 'http://10.0.3.2:8080/graphql'
})
const client = new ApolloClient({
networkInterface
});
return (
<ApolloProvider client={client}>
<App />
</ApolloProvider>)
}
AppRegistry.registerComponent('apolloclient', () => Client);
我的 app.js 服务器端
const express = require('express');
// const bodyParser = require('body-parser');
const mongoose = require('mongoose');
const cors = require('cors');
const chalk = require('chalk');
// New imports
// NEVER FORGET to require the models,
// in which schemas are registered for a certain model
// forgetting it would throw "Schema hasn't been registered for model..."
const models = require('./models');
const expressGraphQL = require('express-graphql');
const schema = require('./schema/schema');
const app = express();
app.use(function(req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
next();
});
// My mongoLab URI
const MONGO_URI = 'mongodb://xxx:xxx@xxx.mlab.com:xxx/xxx';
// mongoose's built in promise library is deprecated, replace it with ES2015 Promise
mongoose.Promise = global.Promise;
// Connect to the mongoDB instance and log a message
// on success or failure
mongoose.connect(MONGO_URI);
mongoose.connection.once('open', () => console.log(`${chalk.blue(` Connected to MongoLab instance `)}`));
mongoose.connection.on('error', error => console.log(`${chalk.yellow(`⚠ Error connecting to MongoLab: ` + error + ` ⚠`)}`));
app.use(cors());
// We pass the schema as an option to our expressGraphQL middleware
app.use('/graphql', expressGraphQL({
schema,
graphiql: true
}))
module.exports = app;
我的 index.js(服务器端):
const app = require('./app');
const chalk = require('chalk');
const PORT = 8080;
app.listen(PORT, () => {
console.log(`${chalk.green(`✔ Server started on http://localhost:${PORT} ✔`)}`);
});
假设您正在与使用 Express 构建的 API 进行通信,然后fetch
按照文档中的说明使用:https ://facebook.github.io/react-native/docs/network.html