我是Nodejs的新手。我正在使用node,express和Postgres DB创建apis。
using System;
using System.IO;
using System.Net;
using System.Net.Http;
using System.Threading.Tasks;
namespace Test
{
class Program
{
static async Task Main(string[] args)
{
var server = new AsyncHttpServer(portNumber: 1234);
await server.Run();
}
class AsyncHttpServer
{
readonly HttpListener listener;
const string RESPONSE_TEMPLATE =
"{{\"RawUrl\":\"{0}\", \"i\":{1}}}";
public AsyncHttpServer(int portNumber)
{
listener = new HttpListener();
listener.Prefixes.Add(string.Format("http://+:{0}/", portNumber));
}
int i = 0;
async void HandleRequest(HttpListenerContext context)
{
Console.WriteLine($"HandleRequest: {context.Request.Url}, {context.Request.RawUrl}, {context.Request.HttpMethod}");
await Task.Delay(TimeSpan.FromSeconds(1));
var response = context.Request.RawUrl == "/" ? string.Format(RESPONSE_TEMPLATE, context.Request.Url.ToString(), ++i) : "";
using (var sw = new StreamWriter(context.Response.OutputStream))
{
await sw.WriteAsync(response);
await sw.FlushAsync();
}
}
public async Task Run()
{
try
{
listener.Start();
while (true)
{
var ctx = await listener.GetContextAsync();
HandleRequest(ctx);
}
}
catch (Exception e)
{
Console.WriteLine(e);
}
}
}
}
}
我的桌子和数据库已经创建。我从Postgres CLI检查过。但是当我使用节点main.js运行我的main.js文件时。它开始侦听本地主机上的端口,但是当我触发时,
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;
它提供404资源未找到错误。
我的邮递员输入是,
http://127.0.0.1:3030/api/v1/postData
答案 0 :(得分: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);
});
});
});