прежде всего, поздравляю с началом нового учебного задания! Но давайте решим эту проблему, не так ли?
1 - Мой совет для вас: прежде чем вы начнете беспокоиться о интерфейсе, давайте удостоверимся, что наш сервис работает нормально, и мы проверим его только на стороне сервера. «Я думаю, что я подключен к своей базе данных», мы не можем продолжить, если думаем, что что-то идет хорошо, нам нужно убедиться!
2 - Нам нужен наш сервис, это единственный способ, которым мы можно подключить нашу БД. Итак, пока мы забыли об интерфейсе и БД, давайте сосредоточимся на сервисе: внутри вашего "приложения. js" вы пытаетесь импортировать свои маршруты, верно? Сделав
const routes = require('./server/routes/index');
Но для этого вам нужно экспортировать эти маршруты раньше, затем go в ваш файл «index. js» и добавить «module.exports = router». Теперь вы можете использовать свой роутер, импортированный в ваш файл "app. js"!
Остаётся так:
const express = require('express');
const router = express.Router();
const pg = require('pg');
const path = require('path');
const connectionString = process.env.DATABASE_URL || 'postgres://postgres:postgres@localhost:5432/todo';
Almost there, our service needs to listen to some port now
router.get('/', (req, res, next) => {
res.sendFile(path.join(
__dirname, '..', '..', 'client', 'views', 'index.html'));
});
router.get('/api/v1/todos', (req, res, next) => {
console.log("HAHAHAHAHA")
const results = [];
// Get a Postgres client from the connection pool
pg.connect(connectionString, (err, client, done) => {
// Handle connection errors
if(err) {
done();
console.log(err);
return res.status(500).json({success: false, data: err});
}
// SQL Query > Select Data
const query = client.query('SELECT name FROM world_heritage_sites.caravanserai ORDER BY iso ASC;');
// Stream results back one row at a time
query.on('row', (row) => {
results.push(row);
});
// After all data is returned, close connection and return results
query.on('end', () => {
done();
return res.json(results);
});
});
});
module.exports = router;
Теперь нашему приложению нужно прослушивать какой-то порт. У меня нет доступа к вашей структуре папок, поэтому я буду работать над этой идеей, используя только те два файла, которые вы нам представили. Внутри вашего "app. js" вы сказали, что ваше приложение должно обслуживаться через один порт, вы можете сделать это, набрав "app.listen (8000, () => console.log ('listening)))", так как вы Экспортируя свое приложение, вы можете импортировать и использовать его где угодно, но я уже говорил вам, я отработаю идею, ограниченную файлами, которые вы нам показали, поэтому ваше "приложение. js" будет похоже на эту проверку эти документы до: https://node-postgres.com/features/connecting
const express = require('express');
const path = require('path');
const logger = require('morgan');
const cookieParser = require('cookie-parser');
const bodyParser = require('body-parser');
const routes = require('./index');
// var users = require('./routes/users');
const app = express();
// view engine setup
// app.set('views', path.join(__dirname, 'views'));
// app.set('view engine', 'html');
// uncomment after placing your favicon in /public
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'client')));
app.use('/', routes);
// app.use('/users', users);
// catch 404 and forward to error handler
app.use((req, res, next) => {
var err = new Error('Not Found');
err.status = 404;
next(err);
});
// error handlers
// development error handler
// will print stacktrace
if (app.get('env') === 'development') {
app.use((err, req, res, next) => {
res.status(err.status || 500);
res.json({
message: err.message,
error: err
});
});
}
// production error handler
// no stacktraces leaked to user
app.use((err, req, res, next) => {
res.status(err.status || 500);
res.json({
message: err.message,
error: {}
});
});
app.listen(8000, () => console.log('listening'))
module.exports = app;
Хорошо, теперь наш сервис работает, go к вашему терминалу и введите: приложение узла. js
он должен напечатать «прослушивание» в вашей оболочке.
Теперь попробуйте получить доступ к http://localhost: 8000 / api / v1 / todos в вашем браузере, это должно вывести ошибку «pg. connect - это не функция "
Это потому, что вы не используете lib правильным способом, попробуйте что-то вроде этого
const express = require('express');
const router = express.Router();
const path = require('path');
const { Pool, Client } = require('pg')
const connectionString = 'postgres://postgres:postgres@localhost:5432/todo'
const client = new Client({
connectionString: connectionString,
})
client.connect()
router.get('/', (req, res, next) => {
res.sendFile(path.join(
__dirname, '..', '..', 'client', 'views', 'index.html'));
});
router.get('/api/v1/todos', (req, res, next) => {
const results = [];
client.query('SELECT name FROM world_heritage_sites.caravanserai ORDER BY iso ASC;', (err, res) => {
console.log(err, res)
client.end()
})
});
module.exports = router;
Но помните, что вам нужно запустить службу Postgres на вашем локальном хосте для подключения, используя эту строку подключения, которую вы используете. Если вы настроили службу Postgres и db правильно, она должна работать нормально, тогда вам просто нужно назвать свой маршрут "localhost: 8000 / api / v1 / todos" в вашем интерфейсе.
На самом деле есть Есть много вещей, которые вы должны проверить в своем коде, и, может быть, это хорошо, если вы получите некоторый опыт до начала этого проекта. Попробуйте несколько уроков для начинающих на YouTube и проверьте код другого разработчика. Удачи и хорошего кода, чувак! Надеюсь, я вам хоть немного помог:)