2017-10-17 74 views
3

我是Nodejs的新手。我正在使用node,express和Postgres DB創建apis。404在Postgres和NodeJs API中找不到錯誤(可能重複)

const {Pool} = require('pg'); 



//const connectionString = process.env.DATABASE_URL || 'postgres://localhost:5432/springmvctutorial'; 

var http = require("http"); 
var express = require('express'); 
const router = express.Router(); 
const app = express(); 
var bodyParser = require('body-parser'); 

var apiVersion = '/api/v1/'; 


const poo = new Pool({ 
    database: 'springmvctutorial', 
    host: 'localhost', 
    user: 'postgres', 
    password : 'root', 
    port: 5432, 
    max: 20, 
    idleTimeoutMillis: 30000, 
    connectionTimeoutMillis: 2000, 
}) 



app.use(bodyParser.json());  // to support JSON-encoded bodies 
app.use(bodyParser.urlencoded({  // to support URL-encoded bodies 
    extended: true 
})); 

//create app server 
var server = app.listen(3030, "localhost", function() { 
    var host = server.address().address 
    var port = server.address().port 
    console.log("Example app listening at http://%s:%s", host, port) 
}); 


router.post('/api/v1/postData', (req, res, next) => { 

    poo.connect((err, client, release) => { 
    if (err) { 
     return console.error('Error acquiring client', err.stack); 
    } 
    client.query('INSERT INTO items(text, complete) values(1,false)', (err, result) => { 
     release(); 
     if (err) { 
     return console.error('Error executing query', err.stack); 
     } 
     console.log(result.rows); 
    }); 
    }); 

}); 

module.exports = router; 

我的表格和數據庫已創建。我從Postgres CLI檢查。但是,當我使用節點main.js運行我的main.js文件時。它開始收聽本地主機上的端口,但是當我啓動時,但當我啓動時,

http://127.0.0.1:3030/api/v1/postData 

它給出404資源找不到錯誤。

我從郵遞員輸入,

{ 
"text":"[email protected]", 
"complete": true 
} 

我完全新的Web開發。所以如果它看起來很傻,請和我一起裸露。

+0

您可以給我們提供鏈接的你打的環境,如果是郵寄或得到什麼?你是否試圖用localhost命中它? –

+0

我正在嘗試從本地主機。這是發佈請求。 – Custadian

回答

2

嘗試這樣的,我沒有測試,由於我沒有在這臺機器

const {Pool} = require('pg'); 
//const connectionString = process.env.DATABASE_URL || 'postgres://localhost:5432/springmvctutorial'; 
var http = require("http"); 
var express = require('express'); 
const app = express(); 
var bodyParser = require('body-parser'); 

var apiVersion = '/api/v1/'; 
const poo = new Pool({ 
    database: 'springmvctutorial', 
    host: 'localhost', 
    user: 'postgres', 
    password : 'root', 
    port: 5432, 
    max: 20, 
    idleTimeoutMillis: 30000, 
    connectionTimeoutMillis: 2000, 
}) 
app.use(bodyParser.json());  // to support JSON-encoded bodies 
app.use(bodyParser.urlencoded({  // to support URL-encoded bodies 
    extended: true 
})); 

//create app server 
app.listen(3030, "localhost", function() { 
    var host = server.address().address 
    var port = server.address().port 
    console.log("Example app listening at http://%s:%s", host, port) 
}); 


app.post('/api/v1/postData', (req, res, next) => { 

    poo.connect((err, client, release) => { 
    if (err) { 
     return console.error('Error acquiring client', err.stack); 
    } 
    client.query('INSERT INTO items(text, complete) values(1,false)', (err, result) => { 
     release(); 
     if (err) { 
     return console.error('Error executing query', err.stack); 
     } 
     console.log(result.rows); 
    }); 
    }); 

}); 
+0

沒有@Basil,它不工作。它是拋出ReferenceError:服務器沒有定義。我想,我們需要var服務器來獲取地址和端口。 – Custadian

+0

那麼,我告訴你,因爲我沒有在這臺機器的環境 請刪除 var host = server.address()。地址 var port = server.address()。端口 他們現在沒用,讓我知道你是否有任何更新:) –

+0

刪除服務器引用的代碼後。有效。你能告訴我爲什麼發生這種情況,以後我不再重複,因爲相同的代碼與MySql一起工作(服務器端口監聽代碼)。 – Custadian